2

免責事項ダウンロードしたファイル名を設定するためにクライアントに送り返す Content-Disposition ヘッダーを認識していますが、私の問題はそれよりも少し複雑です

基本的にドキュメント検索/表示アプリケーション (ドキュメントを検索してからブラウザーでレンダリングする) であるアプリケーション (Rails 3.1.3 を使用する RubyOnRails) があります。これは、iframe を使用して実現されます。

<iframe src="<%= @frameURL %>" width="100%" height="100%">

@frameURLpluginDocuments コントローラーの関数の呼び出しです。プラグイン関数は、バックエンド API に対して RESTful 呼び出しを行い、参照されたドキュメントを取得してから、ドキュメントのコンテンツをブラウザに送り返して iframe 内でレンダリングします。

これは、JPEG、PDF、TXT などのドキュメントでは完全に機能します。ただし、ブラウザがコンテンツ タイプの処理方法を認識していない場合 (Word ドキュメントなど - Mac OS-X を実行している場合)、ブラウザは返されたファイルをダウンロードします。 as plugin.doc <- これは Content-Disposition ヘッダーを設定していないことに注意してください。

ダウンロードする必要があるときにファイルに適切な名前を付けたいので、Content-Disposition ヘッダーを設定します。

response.headers['Content-Disposition'] = "attachment; filename.extension"

ファイルは次のようにダウンロードされますがfilename.doc、このヘッダー セットを使用すると、ブラウザが内部的にレンダリングできる JPEG などのファイルもダウンロードされます。

質問:

  1. plugin.extensionContent-Disposition ヘッダーを設定していない場合、レールまたはブラウザーがどこで名前を取得しているか知っている人はいますか?

  2. Content-Disposition を設定する方法はありますが、ブラウザがドキュメントをレンダリングできない場合にのみ適用する方法はありますか? そのため、デフォルトではブラウザが可能なすべてを処理する必要があり、フォールバックとして、ブラウザは Content-Disposition コンテンツを使用して名前を付けますダウンロードしたファイル。

ありがとう!

4

1 に答える 1

1
  1. 「send_file」などの Rails 関数を呼び出している場合は、Rails のバージョンのソース コードを検索して、その関数のソース コードを見つけ、設定されているヘッダーを確認します。コール スタックをいくつかのレベルまでたどる必要がありますが、ヘッダーがどのように設定されているかを確認できるはずです。私は前にこれをやったことがあります。ブラウザに関しては、Content-Disposition ヘッダーにファイル名が見つからない場合、多かれ少なかれ URL の最後の部分をファイル名として使用すると思います。
  2. ヘッダーで「添付ファイル」の代わりに「インライン」を使用してみてください。
于 2012-08-21T20:19:13.977 に答える