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
していないファイルを強制的にダウンロードするにはどうすればよいでしょうか。私のコードは正しいですか?