发送文件下载请求(HTTP GET)后,“另存为”窗口不会立即弹出

时间:2018-12-03 16:19:20

标签: java spring file http download

我正在使用 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();

0 个答案:

没有答案