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

Java 下载文件在完成之前停止-由响应头中的内容长度引起,java,jakarta-ee,download,Java,Jakarta 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 Buff

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

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,因为它从未被使用过