下载文件在完成之前停止 - 由响应头中的内容长度引起

时间:2014-04-21 12:54:32

标签: java java-ee download

以下代码用于准备要下载的文件:

File downloadFile = new File(ftpPath + File.separator + company.toLowerCase() + File.separator + "download" + File.separator + paramFileName);
FileInputStream fis = new FileInputStream(downloadFile);
BufferedInputStream bis = new BufferedInputStream(fis);


response.setContentType("binary");
response.setHeader("Content-Disposition", "attachment; filename="+paramFileName);

response.setHeader("Content-Length",String.valueOf(downloadFile.length()));
response.setHeader("Content-Encoding", "utf-8");

ServletOutputStream sos = response.getOutputStream();

IOUtils.copy(bis, sos);

sos.flush();
fis.close();
bis.close();
sos.close();

单击并下载文件时,在下载进度条中正确显示总文件大小时,该文件实际上从未完成下载。对于大文件,它大约有95%以上的方式,然后完全停止。对于较小的文件,结果不太一致,但文件永远不会完整下载。

如果删除以下行,则文件会完全下载:

/*
response.setHeader("Content-Length",String.valueOf(downloadFile.length()));
response.setHeader("Content-Encoding", "utf-8");
*/

但是,文件开始下载时不会给出文件总大小。这对我们的用户来说非常不方便,他们可能正在下载一个大文件,并且想知道一个大概的"完成时间"号。

是否有修复程序可以让文件完全下载并且还能准确显示文件大小?

感谢您的帮助

注意:摆脱DataInputStream,因为它从未使用过。

0 个答案:

没有答案