JavaWeb ファイルのダウンロードの進行状況が最後の 0.01% のままになっている

現象

ファイルのダウンロードが100%に達したようですが止まらず、久しぶりに再度ダウンロードしました

理由

1.ファイルサイズが大きすぎる. 実際のファイルサイズは 49.89999 か​​もしれませんが、計算すると四捨五入され、計算が大きすぎます. この時点で、ダウンロードは完了していますが、プログラムはダウンロードが完了したと考えています.完了していません. プログラムはダウンロードを続行する必要がありますが, 実際のデータはありません. 最後に, ダウンロードは明らかに完了していますが, 不足しているという現象が発生します. 問題のコードは通常、次の 2 行に表示されます:

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. 出力ストリームを閉じる前にフラッシュする

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

5.タイムアウト時間とモード選択

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