2012-03-07 16 views
6

Vì vậy, tôi trả lại một FileContentResult từ một hành động như thế này:"File không thể được tải" trong Internet Explorer với ASP.NET MVC

return File(pck.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "MyExcelFile.xlsx"); 

Khi nhấp vào "Open" trong IE (Tôi bằng cách sử dụng IE9, phiên bản 9.0.8112.16421), nó nói "Tệp không thể tải xuống" và người dùng được hiển thị bằng nút 'Thử lại'. Nếu họ nhấp vào Thử lại, nó hoạt động tốt. Nếu họ nhấp vào Lưu, nó hoạt động tốt. Trong Firefox, nó hoạt động tốt.

Làm cách nào để cho phép người dùng mở tệp khi nhấp vào Mở lần đầu tiên?

+0

gì phiên bản của ví dụ? – Joe

+0

Tôi đã cập nhật câu hỏi. –

+0

Cài đặt trình phát và chạy nó khi bạn thực hiện yêu cầu đầu tiên. Bạn sẽ có thể kiểm tra phản hồi từ máy chủ. Có lẽ điều đó sẽ làm sáng tỏ vấn đề. http://www.fiddler2.com/fiddler2/ – Joe

Trả lời

2

Tôi đã có thể "lừa" IE làm điều đúng bằng cách sửa đổi URL. Đó là loại hacky, nhưng đây là chi tiết. HTH.

Là một bộ mã hóa MVC tốt, tôi đã sử dụng Url.Action() để tạo liên kết phù hợp trong giao diện điều khiển của tôi. Kết quả là "/ Subscription/DownloadArchive", và tôi đã có cùng một vấn đề. (Tôi đang phát trực tuyến một tệp ZIP, nhưng có vẻ như không khác với CSV của bạn.) Hiện tại, sau khi đọc bài đăng của bạn, tôi đã mã hóa cứng URL "/Subscription/DownloadArchive/Archive.zip". Tôi bỏ qua "Archive.zip" trong mã, nhưng đó là trong thực tế tên tập tin tôi trở về từ hành động của bộ điều khiển của tôi.

Presto!

0

Tôi đã gặp vấn đề tương tự nhưng nếu tôi thay đổi số cổng của Visual Studio Development Server sang một máy chủ khác thì vấn đề này sẽ biến mất.

2

Tôi có cùng một vấn đề và không thể cung cấp giải pháp tốt (ngoài những gì Tood đề xuất, trong đó một tùy chọn). Nhưng nhìn vào tình hình với fiddler & co., Tôi có thêm một số thông tin có thể giúp đỡ.

Ứng dụng của chúng tôi đang tạo tài liệu PDF khi đang di chuyển và cung cấp chúng dưới dạng tài nguyên đã tải xuống. Vấn đề rõ ràng là phụ thuộc vào dữ liệu, có nghĩa là một số tệp được tạo tải xuống tốt trong lần thử đầu tiên trong khi những tệp khác lại cần phải thử lại.

Fiddler hiển thị các phản hồi của máy chủ giống hệt nhau trên mỗi truy cập, theo như tôi có thể biết. Các yêu cầu khác nhau, tuy nhiên (mẫu hơi thay đổi nội dung):

yêu cầu đầu tiên:

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Referer: ... 
Accept-Language: ... 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept-Encoding: gzip, deflate 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

yêu cầu thứ hai:

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: */* 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

Lưu ý, cách yêu cầu thứ hai giảm 'Accept:' tiêu đề để chỉ */*. Lý do mà tôi miễn cưỡng để thêm một phần mở rộng tập tin cho Url là tên tải về đề xuất được tạo ra từ dữ liệu mục, gửi với phản ứng và nếu không hoàn toàn không liên quan đến ID.

+0

Huh, điều đó rất thú vị. Tôi sẽ phải quay lại đây và nhìn lại lần thứ hai. –

+0

Tôi đã gặp vấn đề tương tự với IE 11. Tôi thấy kết quả tương tự trong Fiddler. Quá trình của tôi là mở một tệp văn bản từ hệ thống cục bộ và chỉnh sửa nó hoặc tạo một tệp từ đầu. Cách giải quyết tốt nhất mà tôi có thể đưa ra là thêm dấu thời gian vào tên tệp như 'filename.timestamp.txt' và nó hoạt động tốt sau đó. – JabberwockyDecompiler

0

làm việc này ..

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Server.ScriptTimeout = 3000; 
Response.AppendHeader("Content-Disposition:", "attachment; filename=" + fileName); 
Response.ContentType = "application/x-msdownload"; 
excelFile.SaveXls(Response.OutputStream); 
Response.Flush(); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
// Response.Close(); 
Response.End(); 
Các vấn đề liên quan