JavaWeb文件下载进度卡到最后0.01%不动了

现象

看似文件下载已经到了100%,但是一直不停止,长时间之后又重新下载

原因

1、文件大小给大了,实际文件49.89999可能,但是我们计算时四舍五入导致算大了,这时候就会导致已经下载完了,但是程序认为还没有下载完,程序要继续下载,而实际又没有数据了,最后就会出现下载完了明明,缺卡住不动的现象,问题代码一般出现在这两行:

response.setContentLengthLong(Long.valueOf(size));

或者

response.setContentLength(Long.valueOf(size));

解决

删掉或者重新计算大小就行

-----其他常见问题

1、响应头部,指定文件名和文件类型

 // 3. 获取响应输出流
response.setContentType("text/plain;charset=UTF-8");
// 4. 附件下载 attachment 附件 inline 在线打开(默认值)
response.setHeader("content-disposition", "attachment;fileName=" + fileName);

2、中文名处理

//处理中文名
String userAgent=request.getHeader("User-Agent");//里面包含了设备类型
System.out.println(userAgent);
if(-1!=userAgent.toLowerCase().indexOf("chrome")){
	//如果是谷歌
	downloadFileName = new String(downloadFileName.getBytes("UTF-8"), "iso-8859-1"); 
}else{
 	//如果是IE
	downloadFileName = new String(downloadFileName.getBytes("GBK"),"iso-8859-1");
}
response.setCharacterEncoding("utf-8");

3、循环输出,防止大文件

byte[] bytes = new byte[1024];  
int cnt=0;  
while ((cnt=in.read(bytes,0,bytes.length)) != -1) {  
	output.write(bytes, 0, cnt);  
} 

4、关闭输出流之前flush

//清空通道
output.flush();

5、超时时间和模式选择

扫描二维码关注公众号,回复: 15070291 查看本文章

如果是ftp的话注意模式选择,开启被动模式

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode(); // 用被动模式传输
ftpClient.setDefaultTimeout(defaultTimeout);// 设置默认超时时间
// 设置缓存区
ftpClient.setBufferSize(1024 * 1024 * 10);

如果是sftp的话设置超时时间

session.setTimeout(60000);

猜你喜欢

转载自blog.csdn.net/myfmyfmyfmyf/article/details/129892934
今日推荐