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

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

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

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

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

9a9b2ec1a7491e641cee64b1d5164cf5.png

首先给工程添加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. }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘!谷歌云确立领先地位的五大变革

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Maribel Lopez编译作者 | 风车云马经过十多年的发展&#xff0c;云计算已经从即时容量和降低成本发展为支持创新的基础服务。在云计算的平台即服务(PaaS) 市场&#xff0c;可以应用机器学习和具有认知功能的各种开发工具。今…

MaxComputeSql性能调优

摘要&#xff1a; 转载自xiaorui 部分用户(尤其对外输出)使用MaxCompute(原Odps)时&#xff0c;由于对产品的使用层面和执行层面了解程度不同&#xff0c;导致提交的任务执行时间过长、占用了较多集群资源&#xff1b;严重的会导致失败、不仅需要投入支持同学精力协助解决、也影…

华为卡槽打不开怎么办_17500元!华为5G折叠手机刷屏,有人焦虑连夜开会…

本文经授权转载自澎湃新闻( ID:thepapernews )华为发布首款5G折叠屏手机Mate X&#xff0c;售价1.75万元。2月24日西班牙巴塞罗那华为发布了首款5G折叠屏手机—— 华为Mate X机身尺寸为8英寸不对称外翻折叠这款国产黑科技一出现立刻引发围观登上热搜那它究竟有啥特别的&#xf…

MaxCompute访问TableStore(OTS) 数据

摘要&#xff1a; MaxCompute作为阿里云大数据平台的核心计算组件&#xff0c;承担了集团内外大部分的分布式计算需求。 免费开通大数据服务&#xff1a;https://www.aliyun.com/product/odps 前言 MaxCompute作为阿里云大数据平台的核心计算组件&#xff0c;承担了集团内外大部…

编程吸金榜:你排第几?网友神回应了 !

作为全球知名招聘求职网站Indeed&#xff0c;最近发布了2019年度最佳工作榜单&#xff0c;公布了2019年的最佳行业领域及工作岗位薪酬&#xff0c;在全行业的榜单中&#xff0c;跟程序员相关的岗位有9个&#xff01;对此&#xff0c;大家纷纷留言表示程序员或成最大赢家&#x…

快速开发工作流_02_集成在线流程设计器

接上一篇&#xff1a;快速开发工作流_01_简单流程案例https://gblfy.blog.csdn.net/article/details/102881983 文章目录七、流程设计器 modeler7.1. 导入war7.2. 重写两个配置类7.3. 添加国际化文件7.4. 资源文件配置7.5. 项目源码七、流程设计器 modeler 7.1. 导入war 解压…

electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记

欢迎来到我的专题文章&#xff1a;《让C给node做技术加持》系列。更多内容&#xff0c;持续更新中&#xff0c;欢迎关注。往期目录&#xff1a;专题&#xff1a;让C给node做技术加持(一)环境搭建&#xff0c;项目运行专题&#xff1a;让C给node做技术加持(二)-NodeJs调用C方法上…

云无边界,阿里云混合云数据同步发布

摘要&#xff1a; 针对不同数据库间数据实时同步难的问题&#xff0c;日前&#xff0c;阿里云宣布推出混合云数据同步一站式解决方案&#xff0c;便于广大云产品用户实现实时数据同步的混合云支持&#xff0c;更为方便的是&#xff0c;该功能让本地Oracle也能实现与云上数据库的…

fs react 使用 保存文件_入门TypeScript编写React

使用 create-react-app 开启 TypeScriptCreate React App 是一个官方支持的创建 React 单页应用程序的CLI&#xff0c;它提供了一个零配置的现代构建设置。当你使用 Create React App 来创建一个新的 TypeScript React 工程时&#xff0c;你可以运行&#xff1a;$ npx create-r…

快速开发工作流_03_集成在线流程设计器_内置用户免登录

接上一篇&#xff1a;快速开发工作流_02_集成在线流程设计器 https://gblfy.blog.csdn.net/article/details/103676784 文章目录八、内置用户免登录8.1. 定位url-config.js8.2. 替换url8.3. 添加配置类AdminRemoteAccountResource8.4. 启动类排除权限校验8.5. 码云地址八、内置…

强推!阿里数据科学家一次讲透数据中台

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 技术领导力社区编辑 | Emma阿里大数据和人工智能科学家 行在&#xff0c;阿里公共数据平台负责人 罗金鹏&#xff0c;在云栖大会、Data Tech等大会中分享到&#xff1a;阿里的“双中台ET”数字化转型方法论及成果&#xff0c…

关于增强学习你应该了解的五件事儿

摘要&#xff1a; 本文主要是讲解了机器学习中的增强学习方法的基本原理&#xff0c;常用算法及应用场景&#xff0c;最后给出了学习资源&#xff0c;对于初学者而言可以将其作为入门指南。 强化学习&#xff08;Reinforcement Learning&#xff09;是当前最热门的研究课题之一…

SpringBoot聚合项目总结

文章目录一、聚合项目架构二、依赖传递图解2.1. 常见场景2.2. 企业场景三、结构设计原则3.1. 模块层次清晰3.2. 模块之间耦合度低3.3. 功能互不影响3.4. 定位问题效率高3.5. 灵活易扩展四、架构设计优点4.1. 统一规范4.2. 版本统一管理4.2.1. 模块版本统一管理4.2.2. 依赖版本统…

容器精华问答 | 虚拟机和容器的区别是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云计算的发展日新月异&#xff0c;新技术层出不穷&#xff0c;尤其容器技术自2013年Docker容器问世以来一路高歌猛进红遍大江南北&#xff0c;与虚拟机相比&#xff0c;容器更显优势&#xff0c;有着更轻量、更快捷、占用资源更少&a…

战神笔记本电脑自带access吗_笔记本电脑卡顿不要急着换,这几个方法,让你的电脑流畅爆表...

电脑现在无论是学生还是上班族都成为了不可或缺的一个东西&#xff0c;笔记本电脑更是成为很多人的宠爱&#xff0c;方便携带。但是很多人的电脑都会面临一个问题&#xff0c;就是笔记本电脑使用没多久就开始卡顿&#xff0c;越来越不流畅。 …

一文看清深圳云栖阿里云重磅产品发布

摘要&#xff1a; 成立九年之后&#xff0c;阿里云不再仅仅是提供计算、存储、网络、安全。 事实上&#xff0c;我们每一天都有新功能在发布。 本文就和大家梳理一下&#xff0c;阿里云此次深圳云栖在云计算、大数据、人工智能、物联网方面的技术产品进展。 成立九年之后&#…

工作流实战_23_flowable 任务监听器 事件监听器

项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base 视频讲解地址 https://www.bilibili.com/video/av79328344 监听器 任务监听器 针对userTask节点 事件监听器 针对任意节点 由于实际情况下我们会在节点会动态调用业务系统的接口去改变业务单据的状态…

pcb设计等长线误差_17种元器件PCB封装图鉴,美翻了(附PCB元件库)

元器件封装的构建是PCB设计中的一个重要环节&#xff0c;小小的一个错误很可能导致整个板子都不能工作以及工期的严重延误。常规器件的封装库一般CAD工具都有自带&#xff0c;也可以从器件原厂的设计文档、参考设计源图中获取。封装名称与图形如下No.1晶体管No.2晶振No.3电感No…

云计算风起云涌,超融合恰逢其时!

戳蓝字“CSDN云计算”关注我们哦&#xff01;“关于超融合市场&#xff0c;确实有一些声音。比如说市场很小&#xff0c;着手做这个业务方向会不会意味着未来堪忧&#xff1f;是不是没有前途&#xff1f;”深信服云BG总经理宋锐打趣说道。“这个问题&#xff0c;要站在客户的角…

Quick BI助力云上大数据分析---深圳云栖大会

摘要&#xff1a; 在3月29日深圳云栖大会的数据分析与可视化专场中&#xff0c;阿里云产品专家陌停对大数据智能分析产品 Quick BI 进行了深入的剖析。大会现场的精彩分享也赢得观众们的一直认可和热烈的反响。 大数据分析之路的挑战与期望 阿里巴巴作为一家大数据公司&#xf…