1

AppEngineデータストアの上に基本的なファイルのアップロード/ダウンロードを実装しました。
私が欲しい機能は、「base.c」という名前のファイルがテキストファイルとして開かれることです。だから私は次のことをしました:(
もちろん私のコードは一般的なケース用ですが、この特定の例は問題を示しています)

resp.setContentType("text/plain");
resp.setHeader("Content-Disposition", "inline; filename=base.c");

これにより、ブラウザでテキストファイルとして開きます。これは私が必要としていたものです。
ただし、ユーザーがブラウザの「名前を付けてページを保存」オプションを使用すると、「base.c」の初期名が表示されることも必要です。これはfirefox(6)でも同様ですが、chrome(15)とsafari(5)ではデフォルトの名前が「download」になります。
さらに悪いことに、ファイル名としてbase.cを選択すると、chromeはこれが間違った拡張子であることをユーザーに警告し、続行するための確認を求めます。
ここで、「インライン」の代わりに「添付ファイル」を使用すると、ファイルは開かれませんが、正しい名前でダウンロードされます。

デフォルトの名前を「base.c」として保存するにはどうすればよいですか?
これはブラウザのせいですか、それともHTTPヘッダーを誤用していますか?

(助けがあれば、すべてのテストはOSX 10.6で行われ、ダウンロードサイトは次のようなものです:http:
//------。appspot.com/download?name = base.c

4

4 に答える 4

3

ほとんどのブラウザは、[名前を付けて保存]オプションの現在のページとしてページ名をデフォルトに設定していると思います。

1つのオプションは、web.xmlのurl-patternを使用して、URLをappspot / download?name=base.cからappspot.com/download/base.cに変更することです。

例えば

<servlet-mapping>
  <servlet-name>download</servlet-name>
  <url-pattern>/download/*</url-pattern>
</servlet-mapping>

次に、URLを解析して、データストアからファイル名を取得します。

これがGAEで機能しない場合は、お詫び申し上げます。よくわかりません。

于 2011-08-21T20:12:02.143 に答える
2

これは既知の問題です。http://greenbytes.de/tech/tc2231/#inlwithasciifilenameを参照してください-FFだけがこれを正しく取得します。

于 2011-09-02T14:52:02.100 に答える
0

これが実際の答えかどうかはわかりませんが、これで問題が解決する可能性があります。プレビューとダウンロードのどちらかを選択するオプションをユーザーに提供できます。これはあなたの問題を解決します

于 2011-08-21T20:03:12.713 に答える
0

filename引数が。Content-Disposition以外の値に対して尊重されることを期待するべきではありませんattachment。@scottが示唆するように、最善のオプションは、URLパスが目的のファイル名で終わるようにURLマッピングを変更することです。これはユーザーにとっても使いやすいです。組み合わせて使用​​できるもう1つのオプションは、Content-Disposition: attachmentGitHubと同じように、送信する「生の」ダウンロードリンクを使用して、HTMLページ内にフォーマットされたファイルを表示することです。

于 2011-08-22T00:28:02.217 に答える