欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Ftp实现上传文件至远程服务器

发布时间:2025/3/21 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Ftp实现上传文件至远程服务器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

服务器安装FTP服务

  • 1.安装vsftpd

    yum -y install vsftpd
  • 2.关闭匿名访问

    vim /etc/vsftpd/vsftpd.conf

    将anonymous_enable的值改为NO

  • 3.启动服务

systemctl start vsftpd.service
  • 4.查看服务状态
systemctl status vsftpd.service

  • 5.开放访问端口

    firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --zone=public --add-port=1025-65535/tcp --permanent systemctl -restart firewalld

    云服务器安全组一定要开放端口21,否则无法正常连接。

  • 6.新增用户

    adduser user passwd user

    也可以在宝塔面板FTP中新增用户


    SpringBoot上传文件到FTP服务器

  • 1.添加依赖

<!-- ftpclient FTO上传文件组件 --><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.3</version></dependency>

2.Ftp工具类

import com.turing.JavaBean.FtpInformation; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.util.UUID;/**** @Author: 又蠢又笨的懒羊羊程序猿* @CreateTime: 2021年07月22日 12:39:47*/ @Component //这就是我们刚才加入的依赖 public class FtpUtil {/*** ftp服务器ip地址*/private static final String FTP_ADDRESS = "39.103.203.27";/*** 端口号*/private static final int FTP_PORT = 21;/*** 用户名*/private static String FTP_USERNAME;/*** 密码*/private static String FTP_PASSWORD;/*** 路径都是/home/加上用户名*/private static String FTP_BASEPATH = "/home/";/*** 参数传过来了文件和文件的输入流* @param file* @return* @throws Exception*/public static String uploadFile(FtpInformation ftpInformation,MultipartFile file)throws Exception {FTP_USERNAME = ftpInformation.getFTP_USERNAME();FTP_PASSWORD = ftpInformation.getFTP_PASSWORD();if ("/home/".equals(FTP_BASEPATH)){FTP_BASEPATH = FTP_BASEPATH+FTP_USERNAME+"/";}//获取上传的文件流InputStream inputStream = file.getInputStream();//获取上传的文件名String filename = file.getOriginalFilename();//获取文件后缀String suffix = filename.substring(filename.lastIndexOf("."));//使用UUID拼接后缀,定义一个不重复的文件名String finalName = UUID.randomUUID() + suffix;//这是最开始引入的依赖里的方法FTPClient ftp = new FTPClient();ftp.setControlEncoding("utf-8");try {int reply;// 连接FTP服务器ftp.connect(FTP_ADDRESS, FTP_PORT);// 登录ftp.login(FTP_USERNAME, FTP_PASSWORD);//连接成功会的到一个返回状态码reply = ftp.getReplyCode();//可以输出看一下是否连接成功System.out.println(reply);//设置文件类型ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//修改操作空间ftp.changeWorkingDirectory(FTP_BASEPATH);//对了这里说明一下你所操作的文件夹必须要有可读权限,chomd 777 文件夹名//这里我就是用的我的home文件夹//这里开始上传文件ftp.storeFile(finalName, inputStream);if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();System.out.println("连接失败");return null;}System.out.println("连接成功!");inputStream.close();ftp.logout();return FTP_BASEPATH+finalName;} catch (Exception e) {e.printStackTrace();System.out.println("ERROR:"+e.getMessage());} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return null;} } import lombok.AllArgsConstructor; import lombok.Data;/*** @Author: 又蠢又笨的懒羊羊程序猿* @CreateTime: 2021年07月24日 13:07:19*/ @Data @AllArgsConstructor public class FtpInformation {private String FTP_USERNAME;private String FTP_PASSWORD; } //记住添加请求头,否则无法接收文件@PostMapping(value = "/uploadFile", headers = "content-type=multipart/form-data") @ResponseBody@ApiOperation("上传文件") public ResponseBean uploadFile(FtpInformation ftpInformation, @RequestParam("files") MultipartFile[] files){List<String> list = new ArrayList<>();for (MultipartFile file : files) {try {//调用自定义的FTP工具类上传文件String finalName = FtpUtil.uploadFile(ftpInformation,file);if (StringUtils.isEmpty(finalName)){throw new Exception("Upload Error");}list.add(finalName);} catch (Exception e) {log.error("ERROR:{}",e.getMessage());return new ResponseBean(HttpStatusCode.INTERNAL_SERVER_ERROR,null);}}return new ResponseBean(HttpStatusCode.Success,list);}
  • 3.测试接口

用Swagger测试接口时文件无法正常接收

因此我们使用Postman进行测试

​ 测试成功

以上。

总结

以上是生活随笔为你收集整理的Ftp实现上传文件至远程服务器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。