2012-01-11 90 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 2012-01-11 17:10:09

+0

@Bennie之前完成的:看起来不错,但是对于用于ZIP文件的“正确的”MIME类型也存在一些混淆,因此您可能需要使用这些值。 – maerics 2012-01-11 17:11:05

+0

好吧,看起来它现在正在工作,至少对于返回文件。尽管这个文件被称为“exportZipSearchResults.htm.zip”,但它做了一件奇怪的事情。有没有内置的方法来改变响应的文件名? – Bennie 2012-01-11 21:44:06

1

在流式传输结果之前,您需要将内容类型标头设置为application/octet-stream。取决于你正在使用response的实施方式,如何实际执行此操作。

相关问题