2011-12-21 30 views
51

Tôi có một phần trên trang web nơi tôi hiển thị pdf bên trong hộp đèn. Việc nâng cấp chrome gần đây đã phá vỡ này hiển thị:Chrome, hiển thị pdf, Tiêu đề trùng lặp nhận được từ máy chủ

Lỗi 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Nhiều header Content-Disposition nhận. Điều này không được phép bảo vệ chống lại các cuộc tấn công phân tách phản hồi HTTP.

Điều này vẫn hoạt động chính xác trong IE.

Tôi đang sử dụng ASP.NET MVC3 trên IIS6

Mã tôi sử dụng để tạo tệp như sau.

Nếu tôi xóa câu lệnh nội tuyến, sau đó tải tệp xuống, tuy nhiên sẽ phá vỡ chức năng hộp đèn.

Vấn đề Mã

public FileResult PrintServices() 
{ 
    //... unrelated code removed 
    MemoryStream memoryStream = new MemoryStream(); 
    pdfRenderer.PdfDocument.Save(memoryStream); 
    string filename = "ServicesSummary.pdf"; 

    Response.AppendHeader("Content-Disposition", "inline;"); 

    return File(memoryStream.ToArray(), "application/pdf", filename); 
} 

Cách khắc phục

Di

Response.AppendHeader("Content-Disposition", "inline;"); 

Sau đó Thay đổi

return File(memoryStream.ToArray(), "application/pdf", filename); 

để

return File(memoryStream.ToArray(), "application/pdf"); 
+0

Related: http://stackoverflow.com/questions/1187261/whats-the-difference-between-the-four-file-resu lts-in-asp-net-mvc –

+0

Bản sao có thể có của [Trả lại tệp để Xem/Tải xuống trong ASP.NET MVC] (http://stackoverflow.com/questions/5826649/returning-a-file-to-view- download-in-asp-net-mvc) –

+0

Liên quan: http://stackoverflow.com/a/16673120/109941 –

Trả lời

66

Các giải pháp trên là tốt nếu bạn không cần phải xác định tên tập tin, nhưng chúng tôi muốn giữ mặc định tên tập tin cụ thể cho người sử dụng.

Giải pháp của chúng tôi đã trở thành tên tệp chính vì nó chứa một số dấu phẩy. Tôi đã thay thế bằng dấu phẩy bằng "" và tệp giờ đây phân phối tài liệu như mong đợi trong Chrome.

FileName = FileName.Replace(",", "") 

Response.ContentType = "application/pdf" 
Response.AddHeader("content-disposition", "attachment; filename=" & FileName)  
Response.BinaryWrite(myPDF) 
+3

Bạn cũng có thể thêm dấu phẩy ngược xung quanh tên tệp. – Nik

+0

Cùng một vấn đề và giải pháp với DocRaptor và PHP 'header()'. Cảm ơn. – Boaz

+31

Cùng một vấn đề ở đây, nhưng chỉ cố định bằng cách đặt tên tệp trong dấu ngoặc kép: 'Response.AddHeader (" content-disposition "," attachment; filename = \ "" + FileName + "\" ")' – roryok

1

Đã xảy ra sự cố này ngay hôm nay. Per roryok và những người khác, giải pháp là đặt tên tập tin vào dấu ngoặc kép.

trước, Chrome FAIL:

header("Content-Disposition: attachment; filename=$file"); 

hiện tại, Chrome OK:

header("Content-Disposition: attachment; filename='$file'"); 

Lưu ý các dấu ngoặc kép quanh $file.

+0

Đối với tôi trong IE, dấu nháy đơn khiến tệp tải xuống với dấu nháy đơn xung quanh tên tệp: 'Blah, Inc. 847.pdf' – Homer

13

Tôi đã từng bình luận @ roryok của, gói tên tập tin trong dấu ngoặc kép: Câu trả lời

Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"") 

@a coder của của việc sử dụng dấu nháy đơn đã không làm việc như mong đợi trong IE. Tệp được tải xuống với dấu nháy đơn vẫn còn trong tên.

+0

Giải pháp này làm việc cho tôi. Tôi vừa thêm vào dấu ngoặc kép đã thoát và sự cố đã được giải quyết. Cảm ơn! – IAmTimCorey

0

Vấn đề của tôi là do nháy kép như hình dưới đây:

var encoding = System.Text.Encoding.UTF8; 

*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**\"{0}\"**", HttpUtility.UrlEncode(file, encoding)));* 

Thay đổi ở trên để làm việc này!

*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**{0}**", HttpUtility.UrlEncode(file, encoding)));* 
0

để sửa lỗi này cho bất kỳ loại tập tin với một tên tập tin tùy chỉnh loại bỏ (hoặc tiêu đề tương tự)

Response.AppendHeader("Content-Disposition", "inline;"); 

và thêm

string fileName = "myfile.xlsx" 
return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName); 

bạn cũng có thể sử dụng filepath thay vì một luồng trong tham số đầu tiên

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