我正在使用 HttpServletResponse 来实现文件下载的方法。从前端网页发送文件下载请求后,“另存为”窗口不会立即弹出。取而代之的是,似乎在缓存了文件的一部分之后,会弹出“另存为”窗口。
例如,如果要下载的文件大小为67.5MB,则在“另存为”窗口出现时,我单击“保存”按钮,那么浏览器(chrome)显示的下载进度已经变为15.9 / 67.5MB。然后进度显示31.8 / 67.5MB,47.8 / 67.5MB,63.7 / 67.5MB,67.5 / 67.5MB。
如果要下载的文件大小小于15.9MB,过一会儿,当出现“另存为”窗口时,我单击“保存”按钮,然后浏览器(chrome)直接保存整个文件。文件保存到磁盘上,一旦“另存为”窗口显示出来,似乎整个文件都已被缓存。
用于发送下载请求的首页上的javascript代码:
window.parent.location.target = "_blank";
window.parent.location.href = url;
后端文件下载的部分代码:
// the type of response is HttpServletResponse
response.setHeader("Content-Disposition", "attachment; filename="
URLEncoder.encode(gridFSFile.getFilename(), "UTF-8"));
response.addHeader("Content-Length", "" + gridFSFile.getLength());
response.setContentType("application/octet-stream;charset=UTF-8");
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[bufferSize];
int bytesRead = -1;
while((bytesRead = downloadStream.read(buffer)) != -1 ) {
os.write(buffer, 0, bytesRead);
}
os.flush();
downloadStream.close();
os.close();