最近项目中需要实现将文件先存放到ftp上,需要的时候再从ftp上下载,做的过程中碰到了问题,发现中文文件名的无法上传到ftp上,ftp上的中文文件名的文件下载不下来,几番折腾,终于搞定了,记录一下备忘。

IIS7服务器管理工具适用群体为:机房管理、站长、运维工作、程序员,等需要大量服务器或者电脑的用户朋友。

IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新。IIS7服务器管理工具适用于Windows操作系统和liunx操作系统;支持Ftp客户端批量操作。

下载地址:IIS7服务器管理工具

首先给工程添加maven依赖,pom.xml文件中添加:

  1. <dependency>
  2. <groupId>commons-net</groupId>
  3. <artifactId>commons-net</artifactId>
  4. <version>1.4.1</version>
  5. </dependency>

以下是Ftp工具类:

  1. package com.test.util;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.net.SocketException;
  9. import org.apache.commons.logging.Log;
  10. import org.apache.commons.logging.LogFactory;
  11. import org.apache.commons.net.ftp.FTP;
  12. import org.apache.commons.net.ftp.FTPClient;
  13. import org.apache.commons.net.ftp.FTPReply;
  14. public class FtpUtil {
  15. private final static Log logger = LogFactory.getLog(FtpUtil.class);
  16. /**
  17. * 获取FTPClient对象
  18. * @param ftpHost FTP主机服务器
  19. * @param ftpPassword FTP 登录密码
  20. * @param ftpUserName FTP登录用户名
  21. * @param ftpPort FTP端口 默认为21
  22. * @return
  23. */
  24. public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) {
  25. FTPClient ftpClient = new FTPClient();
  26. try {
  27. ftpClient = new FTPClient();
  28. ftpClient.connect(ftpHost, ftpPort); // 连接FTP服务器
  29. ftpClient.login(ftpUserName, ftpPassword); // 登陆FTP服务器
  30. ftpClient.setControlEncoding("UTF-8"); // 中文支持
  31. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
  32. ftpClient.enterLocalPassiveMode();
  33. if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
  34. http://logger.info("未连接到FTP,用户名或密码错误。");
  35. ftpClient.disconnect();
  36. } else {
  37. http://logger.info("FTP连接成功。");
  38. }
  39. } catch (SocketException e) {
  40. e.printStackTrace();
  41. http://logger.info("FTP的IP地址可能错误,请正确配置。");
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. http://logger.info("FTP的端口错误,请正确配置。");
  45. }
  46. return ftpClient;
  47. }
  48. /*
  49. * 从FTP服务器下载文件
  50. * @param ftpHost FTP IP地址
  51. * @param ftpUserName FTP 用户名
  52. * @param ftpPassword FTP用户名密码
  53. * @param ftpPort FTP端口
  54. * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
  55. * @param localPath 下载到本地的位置 格式:H:/download
  56. * @param fileName FTP服务器上要下载的文件名称
  57. * @param targetFileName FTP服务器上要下载的文件名称
  58. */
  59. public static void downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String localPath, String fileName, String targetFileName) {
  60. FTPClient ftpClient = null;
  61. try {
  62. ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
  63. ftpClient.changeWorkingDirectory(ftpPath);
  64. String f_ame = new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING); //编码文件格式,解决中文文件名
  65. File localFile = new File(localPath + File.separatorChar + targetFileName);
  66. OutputStream os = new FileOutputStream(localFile);
  67. ftpClient.retrieveFile(f_ame, os);
  68. os.close();
  69. ftpClient.logout();
  70. } catch (FileNotFoundException e) {
  71. logger.error("没有找到" + ftpPath + "文件");
  72. e.printStackTrace();
  73. } catch (SocketException e) {
  74. logger.error("连接FTP失败.");
  75. e.printStackTrace();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. logger.error("文件读取错误。");
  79. e.printStackTrace();
  80. }
  81. }
  82. /**
  83. * Description: 向FTP服务器上传文件
  84. * @param host FTP服务器hostname
  85. * @param port FTP服务器端口
  86. * @param username FTP登录账号
  87. * @param password FTP登录密码
  88. * @param basePath FTP服务器基础目录
  89. * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
  90. * @param filename 上传到FTP服务器上的文件名
  91. * @param input 输入流
  92. * @return 成功返回true,否则返回false
  93. */
  94. public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String filename, InputStream input) {
  95. boolean result = false;
  96. FTPClient ftpClient = new FTPClient();
  97. try {
  98. int reply;
  99. ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
  100. ftpClient.changeWorkingDirectory(ftpPath);
  101. reply = ftpClient.getReplyCode();
  102. if (!FTPReply.isPositiveCompletion(reply)) {
  103. ftpClient.disconnect();
  104. return result;
  105. }
  106. filename = new String(filename.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING); //编码文件名,支持中文文件名
  107. //上传文件
  108. if (!ftpClient.storeFile(filename, input)) {
  109. return result;
  110. }
  111. input.close();
  112. ftpClient.logout();
  113. result = true;
  114. } catch (IOException e) {
  115. e.printStackTrace();
  116. } finally {
  117. if (ftpClient.isConnected()) {
  118. try {
  119. ftpClient.disconnect();
  120. } catch (IOException ioe) {
  121. }
  122. }
  123. }
  124. return result;
  125. }
  126. public static void main(String[] args) {
  127. String ftpHost = "192.168.20.40";
  128. String ftpUserName = "test";
  129. String ftpPassword = "12345";
  130. int ftpPort = 21;
  131. String ftpPath = "test/";
  132. String fileName = "test_通知_4724.docx";
  133. //上传一个文件
  134. try{
  135. String tmpPath = System.getProperty("java.io.tmpdir");
  136. FileInputStream in=new FileInputStream(new File("D:" + fileName));
  137. FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName, in);
  138. System.out.println(tmpPath);
  139. FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, "E:", "test_通知_4724.docx", "测试下载文件.docx");
  140. } catch (Exception e){
  141. e.printStackTrace();
  142. System.out.println(e);
  143. }
  144. }
  145. }

ftp上传文件服务器报550错误_java ftp下载文件,Java 实现ftp上传下载文件相关推荐

  1. java获取服务器上指定文件,java 读取服务器上文件

    java 读取服务器上文件 [2021-02-04 10:02:14]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  2. java中ftp删除文件,Java 实现ftp 文件上传、下载和删除

    实现FTP相关功能 1.下载相应的jar包 commons-net-3.6.jar 2.代码实现 import java.io.File; import java.io.FileInputStream ...

  3. JAVA安装报1620错误_java安装错误1620

    java安装错误1620 [2021-01-31 02:53:38]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  4. Postman报401错误,Unauthorized以及其他接口如何填上token

    用Postman测试接口,报401错误,Unauthorized Unauthorized是指没有权限,我们想要测试这个接口,但是前提要用户登录获得权限,现在怎么办呢? 我们测试登录的接口,拿到tok ...

  5. 直接读取ftp服务器文件,java读取ftp服务器文件

    java读取ftp服务器文件 [2021-02-05 07:08:30]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

  6. javaftp读取服务器文件,java读取ftp服务器文件

    java读取ftp服务器文件 内容精选 换一换 文件系统创建完成后,用户需在客户端挂载文件共享,在本地共享目录和CSG的文件共享建立映射,通过操作本地的目录实现对CSG共享目录的操作,实现数据实时上云 ...

  7. java获取ftp服务器文件,java获取ftp服务器文件

    java获取ftp服务器文件 [2021-02-05 07:26:23]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

  8. 服务器密码修改db2数据库密码错误,db2数据库近一年运行正常,9月4日晚突然连不上数据库,报密码错误,重启数据库后正常?...

    系统环境:aix7+db2 10.5 上层应用报错,因密码校验错误,无法连接数据库:但是在报错的前一刻,数据库连接还是正常的,数据入库也正常. [INFO] 2018-09-04 11:01:11,1 ...

  9. mysql ora01031_逻辑备库上创建JOB报ORA-01031错误

    在逻辑备库上创建任何JOB,包含使用SYS用户去创建,都会报这个: ora-01031 ora-06152 SYS.DBMS_INTERNAL_LOGSTDBY ... 经确认,这个是ORACLE故意 ...

最新文章

  1. spyder 断点调试python代码
  2. python程序员工作怎样-现在Python就业薪资高吗?Python程序员前景怎么样?
  3. 一份超级全面的PHP面试题
  4. 【UOJ34】—多项式乘法(FFT)
  5. 【行业进展】谷歌4大AI黑科技部门,你可知
  6. window.showModalDialog()用法及注意事项
  7. java中Decimaformat_Java中 DecimalFormat 用法详解
  8. 修改linux ssh默认端口
  9. 7-Arco大讲堂(二)
  10. Windows直接获取文件的哈希值
  11. NUXT.JS原理简述
  12. [WCF编程]12.事务:事务概述
  13. AccuMark 7.6.2 格柏服装软件
  14. 【radon】图像的radon变换matlab仿真
  15. Simphony学习2 安全相关(密码和角色)
  16. 关于Android日历视图控件CalendarView
  17. 2019年最新个人所得税计算器(源码/网页版/已发布)
  18. 【工业革命】第四次工业革命:自主经济的崛起
  19. 截至2017年1月59家金融租赁公司
  20. 基于Abaqus-Simpack联合仿真车辆-浮置板轨道耦合动力学仿真

热门文章

  1. KMP 深度讲解next数组的求解
  2. C语言实验——数组逆序
  3. Unity打包失败解决方案
  4. 莉莉丝《剑与远征》:基于阿里云全站加速提升用户体验
  5. 创建VPC前,网络规划的4个问题你弄清了吗?
  6. 基于External-DNS的多集群Ingress DNS实践
  7. weex 在 iOS 上如何实现常见的网络缓存
  8. 融云任杰:强互动,RTC下一个“爆点”场景|拟合
  9. Gartner:云安全的未来——中国的安全访问服务边缘架构
  10. VMware支持客户构建多云未来