2016-10-12 2 views
0

Когда я впервые протестировал этот код, он, казалось, работал нормально, но теперь я получаю ошибку.Не удалось загрузить документ PDF в MVC

Не удалось загрузить PDF документ

я загрузить в формате PDF с помощью моей функции администратора, он переходит в базу данных, а затем у меня есть действие в мой контроллер, который позволяет человеку, чтобы загрузить этот PDF при щелчке на ,

Однако, похоже, что это не работает все время. Я также не смог действительно определить, что заставляет его ломаться. Если размер файла превышает 78 кб, кажется, что Chrome не может открыть документ, пока Firefox/Edge может. Если файл меньше 75 Кб, Chrome/IE открывает его просто отлично. Я не знаю, почему это происходит.

Я включил мой контроллер ниже

public ActionResult DownloadPdf(int Id) { 
    var dbTest = _testRepository.FindId(Id); 
    var cd = new System.Net.Mime.ContentDisposition { FileName = dbTest.PdfName, Inline = true }; 
    Response.AddHeader("Content-Disposition", cd.ToString()); 
    return File(dbTest.PdfData, "application/pdf"); 
} 

Вот мой Посмотреть

@if (Model.Test.HasPdf) 
    { 
     <a data-bind="css: { disabled: !form() }" href="@Url.Action("DownloadPdf", "Test", new { Id = Model.Test.Id })" target="_blank" id="launchBtn" class="btn btn-pdf">Download PDF Form</a> 
} 

ли кто-либо еще когда-либо была ошибка, как это? Если да, то как вы это исправили?

+0

Каков тип столбца базы данных и что такое тип .NET 'PdfData'? – Dai

ответ

0

я понял это. Это не имело никакого отношения к моей функции загрузки, это было в моем HTTPPost

if (vm.FileData != null) 
    { 
     using (var stream = new System.IO.MemoryStream(vm.FileData.ContentLength\\This code between the parenthesis was missing)) 
     { 
      vm.FileData.InputStream.CopyTo(stream); 
      test.FileData = stream.GetBuffer(); 
      test.FileName = vm.FileData.FileName; 
     } 
-1

Предположим, что ваш «dbTest» имеет свойство с содержимым PDF в виде байтового массива (byte []).

Направить загрузить файл

public ActionResult DownloadPdf(int Id) { 
    var dbTest = _testRepository.FindId(Id); 

    Response.ContentType = "application/pdf"; 
    Response.AppendHeader("Content-Disposition", $"filename={dbTest.PdfName}"); 
    Response.AppendHeader("Content-Length", dbTest.PdfData.Length.ToString(CultureInfo.InvariantCulture)); 
    Response.BinaryWrite(dbTest.PdfData); 
    Response.End(); 

    return null; 
} 

или открыть файл в новой вкладке браузера

public ActionResult DownloadPdf(int Id) { 
    var dbTest = _testRepository.FindId(Id); 
    return File(dbTest.PdfData, "application/pdf", dbTest.PdfName); 
} 

Я надеюсь, что это поможет вам

Смежные вопросы