Подтвердить что ты не робот

Открытие pdf файла прямо в моем браузере

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

Вот мой код контроллера действия:

public ActionResult GetPdf(string fileName)
{
    string filePath = "~/Content/files/" + fileName;
    return File(filePath, "application/pdf", fileName);
}

Вот мой взгляд:

@{
   doc = "Mode_d'emploi.pdf";
} 

<p>@Html.ActionLink(UserResource.DocumentationLink, "GetPdf", "General", new { fileName = doc }, null)</p>

Когда я наведите курсор мыши на ссылку, вот ссылка:

enter image description here

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

enter image description here

Я знаю, что это возможно, и мой браузер поддерживает его, потому что я уже тестировал его с помощью другого веб-сайта, позволяющего просматривать PDF прямо в моем браузере.

Например, вот ссылка, когда мышь наводится на ссылку (на другом сайте):

enter image description here

Как вы видите, есть разница в сгенерированной ссылке. Я не знаю, полезно ли это.

Любая идея, как я могу просматривать pdf файл непосредственно в браузере?

Спасибо.

4b9b3361

Ответ 1

Вместо возврата File попробуйте вернуть FileStreamResult

public ActionResult GetPdf(string fileName)
{
    var fileStream = new FileStream("~/Content/files/" + fileName, 
                                     FileMode.Open,
                                     FileAccess.Read
                                   );
    var fsResult = new FileStreamResult(fileStream, "application/pdf");
    return fsResult;
}

Ответ 2

Принятый ответ неверен. Причина, по которой вы получаете сообщение с просьбой открыть или сохранить файл, состоит в том, что вы указываете имя файла. Если вы не укажете имя файла, файл PDF будет открыт в вашем браузере.

Итак, все, что вам нужно сделать, это изменить свое действие на это:

public ActionResult GetPdf(string fileName)
{
    string filePath = "~/Content/files/" + fileName;
    return File(filePath, "application/pdf");
}

Или, если вам нужно указать имя файла, вам нужно будет сделать это следующим образом:

public ActionResult GetPdf(string fileName)
{
    string filePath = "~/Content/files/" + fileName;
    Response.AddHeader("Content-Disposition", "inline; filename=" + fileName);        

    return File(filePath, "application/pdf");
}

Ответ 3

Измените код следующим образом:

       Response.AppendHeader("Content-Disposition","inline;filename=xxxx.pdf");
       return File(filePath, "application/pdf");

Ответ 4

Если вы прочитали файл, хранящийся в столбце образа базы данных, вы можете использовать это:

public ActionResult DownloadFile(int id)
{
    using (var db = new DbContext())
    {
        var data =
            db.Documents.FirstOrDefault(m => m.ID == id);
        if (data == null) return HttpNotFound();
        Response.AppendHeader("content-disposition", "inline; filename=filename.pdf");
        return new FileStreamResult(new MemoryStream(data.Fisier.ToArray()), "application/pdf");
    }
}

Ответ 5

Если вы используете пакет Rotativa для создания PDF файла, то не помещайте имя в файл с атрибутом FileName, как показано ниже.

 return new PartialViewAsPdf("_JcPdfGenerator", pdfModel);

Надеюсь, это кому-то поможет.