我是一个需要从服务器上下载一个大约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