添加maven

  1. <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
  2. <dependency>
  3. <groupId>commons-net</groupId>
  4. <artifactId>commons-net</artifactId>
  5. <version>3.6</version>
  6. </dependency>
  7.  
  8. <dependency>
  9. <groupId>org.apache.commons</groupId>
  10. <artifactId>commons-lang3</artifactId>
  11. </dependency>

UploadUtils.java

  1. import org.apache.commons.lang.RandomStringUtils;
  2.  
  3. public class UploadUtils {
  4.  
  5. /**
  6. * 36个小写字母和数字
  7. */
  8. public static final char[] N36_CHARS = { '0', '1', '2', '3', '4', '5', '6',
  9. '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
  10. 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
  11. 'x', 'y', 'z' };
  12.  
  13. public static String generateFilename(String path, String ext) {
  14. return path + RandomStringUtils.random(8, N36_CHARS) + "." + ext;
  15. }
  16.  
  17. }

ftp工具类

FtpUtils.java

  1. package com.test.cms.ftp;
  2.  
  3. import org.apache.commons.io.FilenameUtils;
  4. import org.apache.commons.lang.StringUtils;
  5. import org.apache.commons.net.PrintCommandListener;
  6. import org.apache.commons.net.ftp.FTP;
  7. import org.apache.commons.net.ftp.FTPClient;
  8. import org.apache.commons.net.ftp.FTPReply;
  9.  
  10. import java.io.*;
  11. import java.net.SocketException;
  12.  
  13. public class FtpUtils {
  14.  
  15. private static final String IP="FTP的IP地址";
  16.  
  17. /**
  18. * ftp端口 默认21
  19. */
  20. private static final Integer PORT=21;
  21.  
  22. /**
  23. * ftp用户名
  24. */
  25. private static final String USERNAME="k";
  26.  
  27. /**
  28. * ftp密码
  29. */
  30. private static final String PASSWORD="k";
  31.  
  32. /**
  33. * 上传的固定路径,可以为空
  34. */
  35. private static final String PATH="";
  36.  
  37. /**
  38. * 编码。默认UTF-8
  39. */
  40. private static final String ENCODING="UTF-8";
  41.  
  42. /**
  43. * 文件上传
  44. * @param path 上传的路径
  45. * @param ext 文件扩展名
  46. * @param in
  47. * @return
  48. */
  49. public static String storeByExt(String path, String ext, InputStream in) {
  50. String filename = UploadUtils.generateFilename(path, ext);
  51. store(filename, in);
  52. return filename;
  53. }
  54.  
  55. /**
  56. * 上传文件到ftp
  57. * @param remote 文件名称
  58. * @param in
  59. * @return
  60. */
  61. private static int store(String remote, InputStream in) {
  62. try {
  63. FTPClient ftp = getClient();
  64. if (ftp != null) {
  65. String filename = PATH + remote;
  66. String name = FilenameUtils.getName(filename);
  67. String path = FilenameUtils.getFullPath(filename);
  68. //切换到path路径下
  69. if (!ftp.changeWorkingDirectory(path)) {
  70. //path路径不存在。进行创建
  71. String[] ps = StringUtils.split(path, '/');
  72. String p = "/";
  73. ftp.changeWorkingDirectory(p);
  74. for (String s : ps) {
  75. p += s + "/";
  76. if (!ftp.changeWorkingDirectory(p)) {
  77. //判断 s 文件夹是否存在,不存在才会执行这行代码
  78. ftp.makeDirectory(s);
  79. ftp.changeWorkingDirectory(p);
  80. }
  81. }
  82. }
  83. ftp.storeFile(name, in);
  84. ftp.logout();
  85. ftp.disconnect();
  86. }
  87. in.close();
  88. return 0;
  89. } catch (SocketException e) {
  90. e.printStackTrace();
  91. return 3;
  92. } catch (IOException e) {
  93. e.printStackTrace();
  94. return 4;
  95. }
  96. }
  97.  
  98. /**
  99. * 获取ftp连接客户端
  100. * @return
  101. * @throws SocketException
  102. * @throws IOException
  103. */
  104. private static FTPClient getClient() throws SocketException, IOException {
  105. FTPClient ftp = new FTPClient();
  106. ftp.addProtocolCommandListener(new PrintCommandListener(
  107. new PrintWriter(System.out)));
  108. ftp.setDefaultPort(PORT);
  109. ftp.connect(IP);
  110. int reply = ftp.getReplyCode();
  111. if (!FTPReply.isPositiveCompletion(reply)) {
  112. System.out.println("FTP server refused connection: {}");
  113. ftp.disconnect();
  114. return null;
  115. }
  116. if (!ftp.login(USERNAME, PASSWORD)) {
  117. System.out.println("FTP server refused login: {}, user: {}");
  118. ftp.logout();
  119. ftp.disconnect();
  120. return null;
  121. }
  122. ftp.setControlEncoding(ENCODING);
  123. ftp.setFileType(FTP.BINARY_FILE_TYPE);
  124. ftp.enterLocalPassiveMode();
  125. return ftp;
  126. }
  127.  
  128. }

控制器,调用方法

  1. import org.apache.http.impl.client.CloseableHttpClient;
  2. import org.apache.http.impl.client.HttpClientBuilder;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.ResponseBody;
  6. import org.springframework.web.multipart.MultipartFile;
  7.  
  8. @Controller
  9. public class TestController {
  10.  
  11. /**
  12. * 上传文件到ftp方法
  13. * @param file
  14. * @return
  15. */
  16. @RequestMapping(value = "/saveFile")
  17. @ResponseBody
  18. public String saveFile(MultipartFile file){
  19. try {
  20. HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
  21. CloseableHttpClient client = httpClientBuilder.build();
  22. //获取扩展名
  23. String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
  24. //ftp存放的文件夹路径 以“/”开头和结尾,路径不要包含中文,不存在的文件夹会进行创建,储存的文件名随机生成
  25. String uploadPath="/awdfffeee1/202010/";
  26. //上传后的文件路径
  27. String fileUrl = FtpUtils.storeByExt(uploadPath, ext, file.getInputStream());
  28. return fileUrl;
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. return "";
  33. }
  34.  
  35. public static void main(String[] args) {
  36.  
  37. }
  38. }

JAVA上传文件到FTP上的更多相关文章

  1. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

  2. java 上传文件到FTP(centos中的ftp服务)

    ftp服务器系统:centos7 提供ftp的服务:vsftpd pom.xml 依赖 <dependency> <groupId>commons-net</groupI ...

  3. .Net 上传文件到ftp服务器和下载文件

    突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿. 最近在做上传文件的功能,上传到ftp文件服务器有利于管理上传文件. 前面的博客有写到layui如何上传文件,然 ...

  4. 用winscp从本地上传文件到服务器上出现复制文件到远端时错误。

    用winscp从本地上传文件到服务器上出现复制文件到远端时错误. 错误码:4 服务器返回的错误消息:write failed 报错如下图所示: 分析过程: 1.刚开始以为是权限不够,后面上网查了一下是 ...

  5. Git学习笔记——从一台电脑上传文件到Github上

    目标:从一台电脑上传文件到Github上 前提: 1.这里假定已在Github上创建了仓库,建立了仓库 2.已在这台电脑上安装了Git客户端 实验环境: 1.Windows 10 64位,已安装了Gi ...

  6. XShell本地上传文件到Ubuntu上及从Ubuntu下载文件到本地

    使用XShell本地上传文件到Ubuntu上及从Ubuntu下载文件到本地. 1.第一种方法是最常用的 :如果下载了Xshell和Xftp,Ctrl+Alt+F就可以选择文件的互传了!(虚拟机/云服务 ...

  7. Linux上F上传文件到FTP服务器

    Linux上上传跟Windows上上传不一样,在Windows上测试没问题,但是放到Linux服务器上跑,上传的文件中文显示乱码.解决方案: FtpUtil.java红色标记处 package cn. ...

  8. Android上传文件之FTP

    android客户端实现FTP文件(包括图片)上传应该没什么难度.写下来就了为了记录一下,望能帮到新手. 需要用到 commons-net-3.0.1.jar,后面附上jar包. 直接上代码: /** ...

  9. Android 上传文件到 FTP 服务器

    实现背景 近期接触到一个需求,就是将文件从Android系统上传到FTP服务器,虽然之前接触过FTP服务器,了解基本的使用流程,但是将此流程从使用习惯转化为代码实现还是有一定难度的.但是基本的流程还是 ...

随机推荐

  1. UOJ #228 - 基础数据结构练习题(势能线段树+复杂度分析)

    题面传送门 神仙题. 乍一看和经典题 花神游历各国有一点像,只不过多了一个区间加操作.不过多了这个区间加操作就无法再像花神游历各国那样暴力开根直到最小值为 \(1\) 为止的做法了,稍微感性理解一下即 ...

  2. Java培训班学员如何找工作?如何过试用期?

    在本文里,首先将结合我了解的多家培训班辅导学员就业的情况,来讲讲培训班学员如何高效找工作.由于本人在周末会兼职在培训班讲课,也帮助过不少学员成功入职,所以下文还会给出"培训班学员如何快速适应 ...

  3. logname

    logname命令用来显示用户名称. 语法 logname(选项) 选项 --help:在线帮助: --vesion:显示版本信息.

  4. 49-Reverse Linked List II

    Reverse Linked List II My Submissions QuestionEditorial Solution Total Accepted: 70579 Total Submiss ...

  5. 巩固javaweb第十六天

    巩固内容: 下拉框 在注册功能中,地区的选择使用了下拉框,可以从地区选项中选择一个地区.在这个 例子中,只允许选择一个,而在有些情况下,下拉框可以进行多选.所以,从功能上来说, 下拉框具有单选按钮和复 ...

  6. Mybatis相关知识点(一)

    MyBatis入门 (一)介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code, ...

  7. zabbix之邮件报警

    创建媒介类型 如果用QQ邮箱的话,先设置一下授权码 为用户设置报警 创建一个用户 配置动作 测试

  8. Oracle 学习PL/SQL

    先上一张实用的图:用于转义字符的. SQL> select chr(42) ||'is what?' from dual; CHR(42)||---------*is what? 想转义哪个就转 ...

  9. SVN终端演练-版本回退

    1. 版本回退概念以及原因?    概念: 是指将代码(本地代码或者服务器代码), 回退到之前记录的某一特定版本    原因: 如果代码做错了, 想返回之前某个状态重做;2. 修改了,但未提交的情况下 ...

  10. UNIX基本命令

    ### 1. 必学命令 help [子命令] : 查看某一个具体的子命令的使用方法### 2. 常用命令 - cd path : 将当前路径切换到path路径 - pwd : 查看当前所在路径 - l ...