2016-11-04 17 views
2

enter image description here Пожалуйста, помогите. Он показывает «Не удалось загрузить документ PDF».Не удалось загрузить документ в формате PDF (MVC)

Я не нашел, где я ошибаюсь в коде.

Это мой код:

Вид:

<a data-toggle="tooltip" data-placement="top" title="View" href="@Url.Action("DownloadFile", new { id = pat.ID })" target="_blank" class=" btn btn-success btn-sm"> 
<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> 

Контроллер:

public FileStreamResult DownloadFile(int id) 
{ 
    MemoryStream workStream = new MemoryStream(); 
    DataModel DB = new DataModel(); 
    /var content = DB._PATIENT.Where(m => m.ID == id).FirstOrDefault(); 
    byte[] contents = (byte[])content.Result; 
    workStream.Write(contents, 0, contents.Length); 
    workStream.Position = 0; 

    Response.AddHeader("Content-Disposition", "inline; filename=someFile.pdf"); 
    return new FileStreamResult(workStream, "application/pdf");  
} 

Модель:

public int ID { get; set; } 
public string PatientCode { get; set; } 
public string CaseNo { get; set; } 
public DateTime DatePerformed { get; set; } 
public byte[] Result { get; set; } 
public DateTime ExpirationDate { get; set; } 
public string LaboratoryName { get; set; } 
+0

Не могли бы вы высказать свое сообщение об ошибке? –

+0

Действительно ли это верные pdf-байты, возвращаемые здесь, 'byte [] contents = (byte []) content.Result;'? – Aruna

+0

@Aruna, да, это действительно. –

ответ

0

Учитывая, что content.Result уже массив байтов в формате PDF, то просто возвращает массив байтов.

public ActionResult DownloadFile(int id) { 
    var DB = new DataModel(); 
    var patient = DB._PATIENT.Where(m => m.ID == id).FirstOrDefault(); 
    if (patient != null && patient.Result != null && patient.Result.Length > 0) { 
     var content = patient.Result; //this is a byte[] of the pdf 
     Response.AddHeader("Content-Disposition", "inline; filename=someFile.pdf"); 
     return File(content, "application/pdf"); 
    } 
    return RedirectToAction("BadPatientFile"); 
} 
+0

Привет, спасибо за ваш ответ. По-прежнему возникает ошибка: «Не удалось загрузить документ PDF». –

+0

Тогда ваш байт-массив, вероятно, имеет поврежденные данные. – Nkosi

+0

Попробуйте в других браузерах, чтобы убедиться, что это не браузер. – Nkosi

0

Вы можете вернуть FileContentResult вместо FileStreamResult, как показано ниже,

public ActionResult DownloadFile(int id) 
{ 
    MemoryStream workStream = new MemoryStream(); 
    DataModel DB = new DataModel(); 
    var content = DB._PATIENT.Where(m => m.ID == id).FirstOrDefault(); 
    byte[] contents = (byte[])content.Result; 
    workStream.Write(contents, 0, contents.Length); 
    workStream.Position = 0; 

    Response.AddHeader("Content-Disposition", "inline; filename=someFile.pdf"); 
    return File(workStream, "application/pdf", "someFile.pdf"); 
} 
+0

Здравствуйте, я получаю следующую ошибку: Невозможно неявно преобразовать тип 'System.Web.Mvc.RedirectToRouteResult' в 'System.Web.Mvc.FileContentResult'. –

+0

Попробуйте использовать возвращаемый тип как «ActionResult». Я редактировал код выше. – Aruna

+0

Спасибо за ваш ответ. Я получил эту ошибку: страница localhost не работает localhost отправил неверный ответ. ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION –

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