2011-10-05 10 views
5

Jedno z moich działań kontrolera zwraca plik użytkownikowi. Chciałbym, aby użytkownikowi przedstawiono okno dialogowe pobierania (otwierania/zapisywania), niezależnie od typu pliku. Działa to dobrze, gdy typ pliku to .doc, .docx, .xlsx, itp., Ale gdy plik jest .txt, .xps, .pdf (czasami) lub .html, otwiera się w przeglądarce.Asp.net MVC FileContentResult - uniemożliwia otwarcie w przeglądarce

Czy mogę zapobiec otwieraniu pliku w przeglądarce i zezwalać użytkownikowi na otwieranie go w osobnym oknie bez konieczności poruszania się od bieżącej strony?

Żądanie tego pliku zostało utworzone za pomocą jQuery's $.ajax({}).

Powiązane: Posiadanie przeglądarki obsługującej żądanie i wywołanie wyskakującego okienka w przeciwieństwie do wywołania AJAX otrzymującego informację o treści pliku jako ciąg odpowiedzi jest wyjaśnione przez this ansewr, ale to pytanie dotyczy zmuszenia przeglądarki do obsługi pliku w w pewien sposób po otrzymaniu.

Odpowiedz

5

Nie sądzę, że można to zrobić za pomocą polecenia lub ustawienia po stronie klienta. Będziesz musiał zrobić coś na serwerze, aby zwracał typ zawartości application/octet-stream dla każdego pliku. W przeciwnym razie przeglądarka sprawdzi plik przychodzący i zdecyduje, co z nim zrobić na podstawie własnych reguł i możliwości.

Jeśli można to zrobić na serwerze, spróbuj ustawić nagłówek "Content-Disposition" do "attachment; filename=whatever.xyz"

+0

Daje to taki sam wynik jak 'application/unknown', który, niestety, jest coś staram się unikać. Dla wygody użytkowników najlepiej jest zezwolić im na otwarcie pliku jednym kliknięciem (po prostu nie w bieżącym oknie przeglądarki). – yoozer8

+0

Jeśli możesz to zrobić na swoim serwerze, spróbuj ustawić nagłówek "Content-Disposition" na "attachment; filename = whatever.xyz" – Ray

+0

To jest dokładnie to. Dzięki. – yoozer8