2009-11-05 30 views
8

Tôi đang cố gắng để làm cho nó có thể cho người dùng tải về một bảng tính Excel từ trang web của chúng tôi, bởi có một nút chuyển hướng qua chuyện này:tải một tập tin qua https trong IE8, sử dụng ASP.NET

Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName)); 

các trang aspx chỉ gửi lại các tập tin thông qua các đối tượng đáp ứng, như thế này:

Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay); 
Response.WriteFile(Server.MapPath(pathName + fileNameUnique)); 
Response.Flush(); 
Response.End(); 

Tất cả mọi thứ chỉ hoạt động tốt trên máy tính của tôi, nhưng khi chúng ta đặt nó trên máy chủ, https kết hợp với không- cài đặt bộ nhớ cache cho chúng tôi lỗi "Internet Explorer không thể tải xuống [blahblahblah]". Cài đặt bộ nhớ cache trên trang hiển thị nút excel:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Expires = 0; 
HttpContext.Current.Response.AddHeader("Pragma", "no-cache"); 
HttpContext.Current.Response.AddHeader("cache-control", "private, no-cache, must-revalidate no-store pre-check=0 post-check=0 max-stale=0"); 
HttpContext.Current.Response.Cache.SetNoServerCaching(); 

Khi tôi xóa các dòng đó, mọi thứ hoạt động tốt. Tuy nhiên, tôi không được phép xóa chúng vì những lý do khác. Vì vậy, tôi đã cố gắng thêm dòng sau vào ExcelForm.aspx ngay trước khi nó bổ sung thêm công cụ để tiêu đề:

Response.ClearHeaders(); 

nào chỉ mang lại cho tôi "Internet Explorer không thể tải ExcelForm.aspx từ [url]". Và đó là nơi tôi bị mắc kẹt. Gợi ý?

Trả lời

15

Gần đây tôi đã gặp sự cố tương tự khi xuất tệp CSV từ một phương pháp điều khiển MVC. Tôi thấy rằng việc thêm:

 Response.ClearHeaders(); 
     Response.Clear(); 

Giải quyết được vấn đề đối với tôi trong IE

Hope this helps!

+0

máy tính nói có! –

+0

Bạn sở hữu \ o /. Làm việc như một say mê \ o/ –

3

Tôi cũng phải đối mặt với cùng một vấn đề,

Khi tôi googled nó, tôi phát hiện ra rằng "không chache" Cài đặt trong phần đầu phản ứng ví dụ mã sau đây là lý do cho vấn đề này.

Response.AppendHeader("Pragma", "no-cache") 
Response.AppendHeader("Cache-Control", "no-cache") 
Response.AppendHeader("max-age", "0") 

Một số các blog nói, để khắc phục vấn đề này, bạn nên thực hiện một số thay đổi trong Windows registry trên Webserver và trên tất cả các máy client (: O), cũng không phải là khả thi để làm các thiết lập registry trên mỗi khách hàng máy móc.

Nguyên nhân sâu xa là thiết lập no-cache trong phần đầu phản ứng, vì vậy tôi chỉ cần thêm

Response.ClearHeaders() 

trước khi thêm nội dung được tải về để tiêu đề phản ứng. Mã như sau:

Response.ClearHeaders() 
Response.ContentType = "application/ms-excel" 
Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") 
Response.BinaryWrite(fileBytes) 
Response.End() 

Đã khắc phục sự cố.

Thưởng thức !!!

+0

Tôi sẽ thử những gì bạn đề xuất. Cảm ơn bạn. (Tôi có cùng một vấn đề) – ileon

+0

bạn sẽ không phải thất vọng;) :) –

0

tôi đã có cùng một vấn đề chính xác tôi đã không thể tải về một dòng máng nhị phân IE8

Theo thông tin trên trang này, mã mới của tôi trông giống như

  • Response.ClearHeaders();
  • Response.ContentType = "application/octet-stream";
  • Trả lời.AppendHeader ("content-disposition", string.Format ("tệp đính kèm; tên tệp = {0}", "nameofthefile.exe"));
  • Response.BinaryWrite (bytes);
  • Response.End();

và bây giờ nó hoạt động như một nét duyên dáng dưới tất cả các trình duyệt

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