2013-02-05 62 views
11

Tôi muốn xem tệp PDF trực tiếp trong trình duyệt của mình. Tôi biết câu hỏi này đã được hỏi nhưng tôi không tìm thấy bất kỳ giải pháp nào phù hợp với tôi.Mở tệp pdf trực tiếp trong trình duyệt của tôi

Đây là mã điều khiển hành động của tôi cho đến nay:

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

Đây là quan điểm của tôi:

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

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

Khi tôi chuột di chuột vào liên kết ở đây là liên kết:

enter image description here

Sự cố với mã của tôi là tệp pdf không được xem trong trình duyệt nhưng tôi nhận được một thông báo yêu cầu tôi nếu tôi di chuyển để mở hoặc lưu tệp.

enter image description here

Tôi biết nó có thể và hỗ trợ trình duyệt của tôi vì tôi đã thử nghiệm nó với một trang web khác cho phép tôi để xem pdf trực tiếp trong trình duyệt của tôi.

Ví dụ, đây là liên kết khi tôi chuột di chuột một liên kết (trên một trang web khác):

enter image description here

Như bạn có thể thấy có một sự khác biệt trong liên kết được tạo ra. Tôi không biết điều này có ích hay không.

Bất kỳ ý tưởng nào về cách tôi có thể xem bản pdf trực tiếp trong trình duyệt?

Cảm ơn.

+0

Đã được trả lời tại đây: http://stackoverflow.com/questions/3206682/stream-file-using-asp-net-mvc-filecontentresult-in-a-browser-with-a-name –

+0

Cảm ơn bạn anderson.pimentel , Nó đã giúp đỡ tôi. – Bronzato

Trả lời

14

Thay vì trả lại một File, hãy thử trả lại một 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

Câu trả lời này là sai. Nhìn vào câu trả lời của tôi. – ataravati

1

Nếu bạn đọc các tập tin lưu trữ trong cột hình ảnh cơ sở dữ liệu, bạn có thể sử dụng như thế này:

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

Thay đổi mã của bạn để này :

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

Câu trả lời được chấp nhận là sai. Lý do bạn nhận được thông báo yêu cầu bạn mở hoặc lưu tệp là bạn đang chỉ định tên tệp. Nếu bạn không chỉ định tên tệp, tệp PDF sẽ được mở trong trình duyệt của bạn.

Vì vậy, tất cả các bạn cần làm là thay đổi hành động của bạn như thế này:

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

Hoặc, nếu bạn cần phải xác định một tên tập tin bạn sẽ phải làm điều đó theo cách này:

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

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

Làm việc tốt cho tôi, cảm ơn ataravati. – Neo1779

0

Nếu bạn đang sử dụng gói Rotativa để tạo PDF, Sau đó, đừng đặt tên tệp với Tên tệp thuộc tính như ví dụ bên dưới.

return new PartialViewAsPdf("_JcPdfGenerator", pdfModel); 

Hy vọng điều này hữu ích cho người khác.

Các vấn đề liên quan