我是一個需要從服務器上下載一個大約10M大小的文件的項目。 我使用直接鏈接(https://開頭serveraddress:端口/文件路徑)下載。 Firefox和IE9是好的,但IE8沒有。 我在這裏搜索了類似的案例,似乎cookie設置有問題。下載文件通過HTTPS
因此,我增加了以下內容:
在XHTML文件的頭部,但我發現響應頭仍然如下:
語用無緩存 緩存控制無緩存
,然後我添加以下內容: response.setHeader( 「緩存控制」, 「私人」); response.setHeader( 「附註」, 「公共」); response.setHeader(「Expires」,「-1」);
在JSP文件,並使用的BufferedInputStream和的BufferedOutputStream讀取和寫入文件,但它仍然無法正常工作,它重定向到debug.xhtml頁面
任何人都可以幫忙嗎?
整個JSP文件是:
final int DEFAULT_BUFFER_SIZE = 10240;
try {
String fileName = request.getPathInfo();
File fileToDownload = new File(request.getSession().getServletContext().getRealPath("/")+ "installer/" + fileName);
if(!fileToDownload.exists()){
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
response.setHeader("Cache-Control", "private");
response.setHeader("Pragma", "public");
response.setHeader("Expires", "-1");
response.setHeader("Content-Disposition","attachment; filename=\"" + fileToDownload.getName()+"\"");
response.setBufferSize(DEFAULT_BUFFER_SIZE);
String contentType = getServletContext().getMimeType(fileToDownload.getName());
if (contentType == null) {
contentType = "application/octet-stream";
}
response.setHeader("contentType", contentType);
response.setHeader("Content-Length", String.valueOf(fileToDownload.length()));
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(
fileToDownload), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response
.getOutputStream(), DEFAULT_BUFFER_SIZE);
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
int index = 1;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
output.close();
input.close();
}
System.out.println("finish");
} catch (Exception e) {
e.printStackTrace();
}
請定義「不好」。什麼是「不好」? – deceze
這只是意味着不工作,我不能用IE8下載文件 – PhoenixCA
那麼,IE8中發生了什麼*而不是? – deceze