我所在的项目需要从服务器下载大小约为10M的文件。 我使用直接URL(https:// serveraddress:port / filepath)来下载它。 firefox和IE9还可以,但IE8没有。 我在这里搜索了类似的案例,似乎cookie设置有问题。
所以我添加了以下内容:
在xhtml文件的头部,但我发现响应头仍然如下:
Pragma No-cache 缓存控制无缓存
然后我添加以下内容: response.setHeader(“Cache-Control”,“private”); response.setHeader(“Pragma”,“public”); 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();
}
答案 0 :(得分:0)
我认为这是IE漏洞,请通过关键字“IE文件下载https缓存pragma”尝试Google。有一些关于它的文章,例如:http://mark.koli.ch/2009/10/internet-explorer-cant-open-file-via-https-try-removing-the-pragma-header.html,http://support.microsoft.com/kb/323308