Открытие 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 файл непосредственно в браузере?
Спасибо.
Ответы
Ответ 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);
Надеюсь, это кому-то поможет.