2011-10-05 46 views
5

Một trong các hành động điều khiển của tôi trả về một tệp cho người dùng. Tôi muốn người dùng được trình bày với hộp thoại tải xuống (mở/lưu), bất kể loại tệp nào. Điều này hoạt động tốt khi loại tệp là .doc, .docx, .xlsx, v.v., nhưng khi tệp là .txt, .xps, .pdf (đôi khi) hoặc .html, nó sẽ mở trong trình duyệt.Asp.net MVC FileContentResult - ngăn chặn mở trong trình duyệt

Có cách nào tôi có thể ngăn tệp mở trong trình duyệt hay không và chỉ cho phép người dùng mở tệp trong cửa sổ riêng mà không cần điều hướng khỏi trang hiện tại?

Yêu cầu cho tệp được tạo bằng cách sử dụng jQuery $.ajax({}).

Liên quan: Việc trình duyệt xử lý yêu cầu và cho cửa sổ bật lên trái với cuộc gọi AJAX nhận được tệp conent của tệp dưới dạng chuỗi phản hồi được giải thích bởi this ansewr, nhưng câu hỏi này buộc trình duyệt xử lý tệp trong một cách nào đó một khi nó được nhận.

Trả lời

5

Tôi không nghĩ bạn có thể làm điều này với lệnh hoặc cài đặt phía máy khách. Bạn sẽ cần phải làm một cái gì đó trên máy chủ để nó trả về một loại nội dung của application/octet-stream cho mỗi tệp. Nếu không, trình duyệt sẽ xem xét tệp đến và quyết định phải làm gì với nó dựa trên các quy tắc và khả năng của riêng nó.

Nếu bạn có thể làm điều này trên máy chủ của bạn, hãy thử đặt "Content-Disposition" tiêu đề để "attachment; filename=whatever.xyz"

+0

Điều này mang lại kết quả tương tự như 'application/unknown', trong đó, không may, là điều mà tôi đang cố gắng để tránh. Để thuận tiện cho người dùng, tốt nhất là cho phép họ mở tệp bằng một cú nhấp chuột (chỉ trong cửa sổ trình duyệt hiện tại). – yoozer8

+0

Nếu bạn có thể thực hiện việc này trên máy chủ của mình, hãy thử đặt tiêu đề "Chuyển nội dung" thành "tệp đính kèm; tên tệp = whatever.xyz" – Ray

+0

Chính xác là vậy. Cảm ơn. – yoozer8

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