Я нахожусь в проекте, который должен загрузить файл размером около 10M с сервера.
И я использую прямой URL (https://serveraddress:port/filepath), чтобы загрузить его. Firefox и IE9 в порядке, но IE8 нет.
Я искал подобный случай здесь, и кажется, что что-то не так с настройкой cookie.
Итак, я добавил следующее:
в заголовке файла xhtml, но я обнаружил, что заголовок ответа по-прежнему такой:
Pragma No-cache
Cache-Control 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();
}