ftp文件下载时压缩包数据损失的问题
2014-10-27 10:19
253 查看
1.下载的时候老是出现ftp文件压缩包的数据丢失的问题。
查看到文件服务器,跟踪ftp会话的id,发现怎么老是连接不到1-2秒的时间就自动关闭。这时才造成文件压缩包下载从服务器取不出数据下来。
2.发现这个问题,在文件服务器serv-u下测试没有问题。但是在fileZilla 测试时还是会发生以上的问题。晕闷!
3.最后想想可能是ftp文件下载时客户端代码没有手动关闭ftp连接。
4.测试一下果然如此,在两个ftp文件服务器版本下测试都没有问题。
1.FileZiila上述加上连接中断代码显示效果。
2.serv-u 会话id
3.查看信息
查看到文件服务器,跟踪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.查看信息
相关文章推荐
- FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题解决
- oracle 调用Java 实现ftp文件的上传和下载 问题
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 使用java向FTP上传或下载压缩文件时的问题
- 解决FTPClient linux 下载文件小于实际文件,线程挂起等问题
- jsp内存数据下载到本地--弹出的文件保存框时 两次调用action中下载方法问题
- 下载文件名字乱码问题,json_encode解决Ajax 返回字符串数据不显示问题
- java 使用 ftp下载文件失败的问题
- Linux解决问题篇——ftp上传文件(使用put)时,permission denied,下载文件(使用get)时,failed to open file
- 使用FTP下载文件connect.retrieveFileStream(filename) 获取不到InputStream流,返回null的问题
- c++builder ftp下载文件和和bcp导入数据
- 使用FTPClient文件上传下载遇到的问题
- 关于用FTPClient资源库上传下载以中文命名的文件的问题
- 通过FTP将一个数据文件从A服务器下载到B服务器的整个过程
- 【LoadRunner】同一用户同时通过FTP服务器下载文件问题
- jaVA使用FTP上传下载文件的问题
- socket简单实现ftp的文件传送(C++V2.0版,解决数据丢失问题)
- 在Servlet中以下载的方式向浏览器写数据--中文文件乱码问题解决
- java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题
- servlet返回application/json数据类型在ie浏览器中提示下载文件问题