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

  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;
	}

ftp文件下载时压缩包数据损失的问题_第1张图片

1.FileZiila上述加上连接中断代码显示效果。

2.serv-u  会话id

ftp文件下载时压缩包数据损失的问题_第2张图片

3.查看信息

ftp文件下载时压缩包数据损失的问题_第3张图片



你可能感兴趣的:(web开发)