1.下载的时候老是出现ftp文件压缩包的数据丢失的问题。
查看到文件服务器,跟踪ftp会话的id,发现怎么老是连接不到1-2秒的时间就自动关闭。这时才造成文件压缩包下载从服务器取不出数据下来。
2.发现这个问题,在文件服务器serv-u下测试没有问题。但是在fileZilla 测试时还是会发生以上的问题。晕闷!
3.最后想想可能是ftp文件下载时客户端代码没有手动关闭ftp连接。
4.测试一下果然如此,在两个ftp文件服务器版本下测试都没有问题。
/**
* 下载文件,直接使用httpClient进行下载,测试正常。
*
* @return
* @throws Exception
*/
public String download() throws Exception {
if (null == fileMessageId || fileMessageId <= 0) {
throw new IesBussException("下载文件出错,文件下载记录id不正确,请稍后重试或联系系统管理员!");
}
FileMessage fileMsg = fileService.findOne(fileMessageId);
// 浏览器下载时,保存的默认文件名称
fileName = fileMsg.getFile_name();
logger.debug("------浏览器下载时,保存的默认文件名称--------" + fileName);
// ftp服务器上需要下载的文件名
String ftpFileName = fileMsg.getFtp_file_name();
// 连接FTP服务器
FTPClient ftpClient = ftpConnect.connect();
if (ftpClient!=null) {
OutputStream out =null;
try {
inputStream = ftpConnect.download(ftpFileName, fileMsg.getFtp_file_path(),ftpClient);
//不同浏览器解析中文文件名所出现的乱码问题
String userAgent = httpServletRequest.getHeader("User-Agent");
byte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes("UTF-8"); // name.getBytes("UTF-8")处理safari的乱码问题
fileName = new String(bytes, "ISO-8859-1"); // 各浏览器基本都支持ISO编码
//输出文件
httpServletResponse.setContentType("application/x-msdownload");
httpServletResponse.setHeader("Content-Disposition",String.format("attachment; filename=\"%s\"", fileName));
byte[] buf = new byte[1024];
int len = 0;
out = httpServletResponse.getOutputStream();
while ((len = inputStream.read(buf)) > 0){
out.write(buf, 0, len);
}
} catch (IOException e) {
if(e.getMessage()==null){
logger.error("下载文件IO错误"+e.getMessage()+",已处理异常");
return null;
}
throw new IesBussException("下载文件出错,请稍后重试或联系系统管理员!");
}finally{
try {
if(null !=out) {
out.flush();
out.close();
}
if(null !=inputStream) {
inputStream.close();
}
} catch (Exception e) {}
ftpClient.logout();
ftpClient.disconnect();
}
} else {
logger.error("Connect to ftp server error!");
}
if(null==inputStream){
throw new IesBussException("下载文件出错,服务器上没找到该文件,可能已经被删除!");
}
return null;
}
1.FileZiila上述加上连接中断代码显示效果。
2.serv-u 会话id
3.查看信息