Jak ustawić nazwę pliku odpowiedzi bez wymuszania okna dialogowego „Zapisz jako”

122

Zwracam strumień w jakiejś odpowiedzi ustawiając odpowiedni content-typenagłówek. Zachowanie, którego szukam, jest następujące:

  • Jeśli przeglądarka jest w stanie renderować zawartość danego typu treści, to powinna wyświetlić ją w oknie przeglądarki.

  • Jeśli przeglądarka nie wie, jak wyrenderować zawartość, powinna wyświetlić okno dialogowe „zapisz jako”, w którym nazwa pliku powinna być zgodna z nazwą podaną w odpowiedzi.

Problem w tym, że jeśli ustawię Content-Dispositionnagłówek z:

"załącznik; filename =" myfile.txt ""

przeglądarka zawsze wyświetli okno dialogowe „Zapisz jako”.

Jeśli nie ustawię Content-Disposition, nazwa pliku użyta w oknie dialogowym „Zapisz jako” to ta w adresie URL, która nie działa w moim przypadku.

Próbowałem również ustawienie Content-Dispositionna inlineale wynik jest taki sam.

Hugo Palma
źródło

Odpowiedzi:

173

Właściwy sposób może być:

Content-Disposition: inline; filename="myfile.txt"

Patonza
źródło
7
Nie jestem pewien, co miałeś na myśli, mówiąc o „braku szerokiego wsparcia”, kiedy pisałeś tę odpowiedź, i chciałbym, żebyś zamiast FUD podał twarde fakty. Właśnie przetestowałem IE 6, IE 8, nowoczesną przeglądarkę Chrome i nowoczesną przeglądarkę Firefox i działa we wszystkich; o ile wiem, obecnie używanie tego jest całkowicie bezpieczne.
Mark Amery
Nie działa z moim FireFox 37.0.2 i Internet Explorer 11.0.18. Zostanie wyświetlone okno dialogowe Zapisz jako. Chrome działa jednak.
angularsen
3
W rzeczywistości działa zarówno w przeglądarce Firefox 37.0.2, jak i IE 11.0.18 (właśnie przetestowane). Prawdopodobnie używasz typu treści, którego Twoja przeglądarka nie może wyświetlić w tekście.
Patonza
1
Kilka uwag omówionych również w różnych dyskusjach na stackoverflow.com/questions/93551/ ... - jeśli masz spacje w nazwie pliku, musisz umieścić podwójne cudzysłowy ( ") wokół nazwy pliku. Jeśli masz w nazwie pliku znaki spoza zestawu ASCII, powinieneś zobaczyć to drugie pytanie, aby omówić, co robić.
Christopher Schultz,
Nie działa dla PDF w IE11.0.96. Nic dziwnego, Chrome działa dobrze.
user1566694
2

Nie jestem pewien, czy jest to domyślnie możliwe. Ze względów bezpieczeństwa przeglądarki nie wysyłają wszystkich typów treści, które mogą obsłużyć, ale tylko kilka Accept-Encoding, co nie pomaga zbytnio w Twoim scenariuszu.

Może możesz zapytać użytkownika, co woli, i zapisać te informacje w jego profilu.

Rubens Farias
źródło