2013-02-05 15 views
11

Chciałbym obejrzeć plik PDF bezpośrednio w mojej przeglądarce. Wiem, że to pytanie już zostało zadane, ale nie znalazłem żadnego rozwiązania, które byłoby dla mnie skuteczne.Otwieranie pliku PDF bezpośrednio w przeglądarce

Oto kod kontrolera mojego działania do tej pory:

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

Oto mój widok:

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

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

Kiedy mysz najechaniu na link Oto link:

enter image description here

Problem z moim kodem polega na tym, że plik PDF nie jest wyświetlany w przeglądarkę, ale dostaję wiadomość z pytaniem, czy mogę otworzyć i zapisać plik.

enter image description here

wiem, że to jest możliwe, a moja przeglądarka to wsparcie, bo już przetestować go z innej strony pozwala mi zobaczyć PDF bezpośrednio w przeglądarce.

Na przykład, tu jest link, kiedy mysz najechaniu link (na innej stronie internetowej):

enter image description here

Jak widać istnieje różnica w wygenerowanym linkiem. Nie wiem, czy to jest przydatne.

Każdy pomysł, w jaki sposób mogę wyświetlić mój plik PDF bezpośrednio w przeglądarce?

Dzięki.

+0

Masz już odpowiedź tutaj: http://stackoverflow.com/questions/3206682/stream-file-using-asp-net-mvc-filecontentresult-in--browser-z -name- –

+0

Dziękuję anderson.pimentel , to mi pomogło. – Bronzato

Odpowiedz

14

Zamiast zwracania File, spróbuj Zwracanie 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; 
} 
+0

Ta odpowiedź jest błędna. Spójrz na moją odpowiedź. – ataravati

1

Jeśli czytasz plik zapisany w kolumnie bazy danych obrazu, można użyć tak:

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"); 
    } 
} 
8

Zmień swój kod do tego :

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

Przyjęta odpowiedź jest błędna. Powodem, dla którego otrzymujesz komunikat z prośbą o otwarcie lub zapisanie pliku, jest określenie nazwy pliku. Jeśli nie określisz nazwy pliku, plik PDF zostanie otwarty w przeglądarce.

Tak, wszystko co musisz zrobić, to zmienić swoje działania do tego:

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

Lub, jeśli trzeba podać nazwę pliku będziesz musiał zrobić to w ten sposób:

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

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

Działa dobrze dla mnie, dzięki ataravati. – Neo1779

0

Jeśli używasz pakietu Rotativa do generowania plików PDF, nie umieszczaj nazwy pliku przy użyciu atrybutu NazwaPliku, jak na poniższym przykładzie.

return new PartialViewAsPdf("_JcPdfGenerator", pdfModel); 

Mam nadzieję, że jest to pomocne dla kogoś.

Powiązane problemy