1

JAVA を使用して、ブラウザに強制的にファイルをダウンロードさせようとしています。

現在使用しているコードは次のとおりです。

response.reset();
response.resetBuffer();
response.setContentType(mimeType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
IOUtils.copy(in, out);

out.flush();
out.close();
in.close();
response.flushBuffer();

ほとんど問題なく動作しますが、ドキュメント (MS Office 2007 以降) を強制的にダウンロードするとdocx、ダウンロードしたファイルが破損します (少なくとも、MS Office からはそう言われます)。それらを保存しているサーバーで直接開こうとすると、そのエラーは表示されません。つまり、問題はダウンロード時に干渉します (アップロード時ではありません)。

IANAによると、このようなファイルの MIME タイプはapplication/vnd.openxmlformats-officedocument.wordprocessingml.document (1)である必要がありますが、その MIME タイプを指定しても問題は解決しません。

ウェブ上にはいくつかのトラックがありますが、どれも私にはうまくいきませんでした。に解決策があるようですがASP.NET、に相当するものは見つかりませんでしたJAVA

そこで見た MIME タイプapplication/vnd.ms-word (2)も使用しようとしました、ダウンロードしたファイルはまだ破損しています。ここで提案されたMIMEタイプapplication/msword (3)と、このフォーラムで提唱された一般的なMIMEタイプ(4)の同上。application/octet-stream

次に、これら 4 つの MIME タイプのそれぞれについて、ダウンロードしたファイルの名前をmyfile.docxからmyfile.doc(もうxではありません) に変更しようとしましたが、問題は解決しません。

では、ダウンロード時に破損 docxしていないファイルを強制的にダウンロードするにはどうすればよいでしょうか。私のコードは正しいですか?

4

1 に答える 1

3

たまたまヘッダーを追加しようとしましたが、実際、Content-Lengthヘッダーは問題を解決しました...

最後に、次の行を追加して機能させます。

response.setContentLength((int) file.length());
于 2012-05-03T13:17:04.537 に答える