您的位置:首页 > 编程语言 > PHP开发

ftp文件下载时压缩包数据损失的问题

2014-10-27 10:19 253 查看
  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.查看信息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ftp服务器 压缩 ftp
相关文章推荐