「名前を付けて保存」ダイアログを強制せずに応答ファイル名を設定する方法


122

適切なcontent-typeヘッダーを設定して、いくつかの応答でストリームを返しています。私が探している動作はこれです:

  • ブラウザが特定のコンテンツタイプのコンテンツをレンダリングできる場合は、ブラウザウィンドウに表示する必要があります。

  • ブラウザがコンテンツのレンダリング方法を知らない場合は、「名前を付けて保存」ダイアログを表示する必要があります。ファイル名は、応答で指定されたものである必要があります。

問題は、Content-Dispositionヘッダーを次のように設定した場合です。

"添付ファイル; filename =" myfile.txt ""

ブラウザは常に「名前を付けて保存」ダイアログを表示します。

を設定しない場合Content-Disposition、[名前を付けて保存]ダイアログで使用されるファイル名は、私の場合は機能しないURLのファイル名です。

に設定Content-Dispositionしてみましたinlineが、結果は同じです。

回答:


173

正しい方法は次のとおりです。

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


7
この回答を書いたときに「広くサポートされていない」とはどういう意味かわかりません。FUDの代わりに難しい事実を教えていただければ幸いです。IE 6、IE 8、最新のChrome、最新のFirefoxでテストしたところ、すべてで動作します。私の知る限り、これを今日使用するのは完全に安全です。
マークアメリー2014年

FireFox37.0.2およびInternetExplorer11.0.18では動作しません。[名前を付けて保存]ダイアログが表示されます。Chromeは動作します。
angularsen

3
実際には、Firefox37.0.2とIE11.0.18(テスト済み)の両方で機能します。ブラウザがインラインで表示できないContent-Typeを使用している可能性があります。
パトンザ2015年

1
stackoverflow.com/questions/93551/…でさまざまな議論で取り上げられているいくつかのメモ-ファイル名にスペースがある場合は、ファイル名を二重引用符(")で囲む必要があります。ファイル名にASCII以外の文字が含まれている場合は、他の質問を参照して、何をすべきかを説明する必要があります。
クリストファーシュルツ2015

IE11.0.96のPDFでは機能しません。当然のことながら、Chromeは問題なく動作します。
user15666 9419年

2

それがデフォルトで可能かどうかはわかりません。セキュリティ上の懸念から、ブラウザは処理できるすべてのコンテンツタイプを送信Accept-Encodingするわけではありませんが、ごく一部しか送信しません。これは、シナリオではあまり役に立ちません。

たぶん、あなたはあなたのユーザーに彼らが何を好むかを尋ね、その情報を彼らのプロフィールに保存することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.