2012-01-11 10 views
5

このような状況では、検索結果ファイルを含むzipファイルを作成し、そのファイルをユーザーに送信しようとしています。ここで私が現在使っているコードの塊です。応答ファイルOutputStreamを使用してzipファイルをブラウザに返すにはどうすればよいですか?

File[] zippable = new File[files.size()]; 
File resultFile = ZipCreator.zip(files.toArray(zippable), results); 
InputStream result = new FileInputStream(resultFile); 
IOUtils.copy(result, response.getOutputStream()); 

ただし、現在のところこれは正しく機能しません。私が作成したzipファイルを返すのではなく、htmlファイルを返します。後で手動でファイル拡張子を変更すると、ファイルの内容が依然として必要な検索結果であることがわかります。だから、問題はちょうど応答に適切な拡張を返すことにあります。

誰もがこのような状況について助言していますか?

答えて

6

Content-Type応答ヘッダーを値application/zip(または対象のブラウザに応じてapplication/octet-stream)に設定する必要があります。さらに、添付ファイルのステータスとファイル名を示す追加の応答ヘッダーを送信することもできます。

+0

私はここであなたを誤解しているかもしれないと思う。私はコードに行を追加したので、 'response.setHeader(" Content-Type "、" application/zip ");' はまだ成功していません。この呼び出しは、IOUtils.copy – Bennie

+0

@Bennieの呼び出しの直前に行われています。正常ですが、ZIPファイルに使用する「正しい」MIMEタイプについては混乱があります。 。 – maerics

+0

さて、少なくとも、ファイルを返すために、今は動作しているようです。それは、ファイルが "exportZipSearchResults.htm.zip"と呼ばれているところで、奇妙なことです。応答のファイル名を変更する組み込みの方法はありますか? – Bennie

1

結果をストリーミングする前に、コンテンツタイプヘッダーをapplication/octet-streamに設定する必要があります。 responseの実装によって、実際にどのように使用しているかによって異なります。

関連する問題