2012-01-11 35 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的實施方式,如何實際執行此操作。

相關問題