当前位置: 首页 > news >正文

spring boot 连接FTP实现文件上传

spring boot 连接FTP实现文件上传

maven:

        <!--ftp--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency>

接口示例:

    @ApiOperation(value="上传文件到FTP")@PostMapping("/fileUploadFTP")public Boolean uploadFileToFtp(@RequestParam("file") MultipartFile file) {boolean flag = uploadFile("192.168.2.128",21,file,"user","123456","/");return false;}

方法:

public static boolean uploadFile(String url, int port, MultipartFile file,String username,String password, String path) {FTPClient ftpClient = new FTPClient();boolean result = false;try {String filename = file.getOriginalFilename();// 连接到FTP服务器ftpClient.connect(url, port);// 登录boolean login = ftpClient.login(username, password);if (!login) {System.out.println("FTP 登录失败");return result;}// 设置控制编码(处理中文文件名)ftpClient.setControlEncoding("UTF-8");// 检查是否成功连接int replyCode = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(replyCode)) {System.out.println("连接失败,FTP 服务器返回错误:" + replyCode);return result;}// 切换到指定的目录boolean changeDir = ftpClient.changeWorkingDirectory(path);if (!changeDir) {System.out.println("目标目录不存在或没有权限:" + path);// 尝试创建目标目录if (ftpClient.makeDirectory(path)) {System.out.println("创建目录成功:" + path);} else {System.out.println("无法创建目录:" + path);return false;}}// 设置文件类型(二进制文件类型,适用于所有类型的文件)ftpClient.setFileType(FTP.BINARY_FILE_TYPE);try (InputStream fis = file.getInputStream()) {// 上传文件String encodedFilename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");result = ftpClient.storeFile(encodedFilename, fis);if (result) {System.out.println("文件上传成功!");} else {replyCode = ftpClient.getReplyCode();String replyMessage = ftpClient.getReplyString();System.out.println("上传失败,FTP 回复: " + replyCode + " " + replyMessage);}}// 退出ftpClient.logout();} catch (IOException e) {e.printStackTrace();} finally {try {// 断开与服务器的连接if (ftpClient.isConnected()) {ftpClient.disconnect();}} catch (IOException e) {e.printStackTrace();}}return result;}
http://www.lryc.cn/news/544336.html

相关文章:

  • 怎么进行mysql的优化?
  • Octave3D 关卡设计插件
  • 【论文笔记-TPAMI 2024】FreqFusion:用于密集图像预测的频率感知特征融合
  • DeepBI成单关键词管理策略:提升转化与曝光,助力电商业绩双增长
  • ai-3、机器学习之逻辑回归
  • 在kubernetes集群中持续压测 SpringCloud 应用,pod 的 memory cache 持续增长问题
  • 金融赋能绍兴纺织 民生银行助力外贸中小微企业“走出去”
  • ubuntu:换源安装docker-ce和docker-compose
  • 基于 Elasticsearch 和 Milvus 的 RAG 运维知识库的架构设计和部署落地实现指南
  • 基于Python的web漏洞挖掘,漏洞扫描系统(附源码,部署)
  • Spring Boot全局异常处理:“危机公关”团队
  • Wireshark:自定义类型帧解析
  • Redis7——进阶篇(一)
  • word转换为pdf后图片失真解决办法、高质量PDF转换方法
  • Kafka零拷贝
  • 鸿蒙应用开发入门教程
  • 【2022——暴力DP / 优雅背包】
  • AI智能体与大语言模型:重塑SaaS系统的未来航向
  • 绕过密码卸载360终端安全管理系统
  • golang安装(1.23.6)
  • 星闪开发入门之常见报错整理(一)
  • Node.js与MySQL的深入探讨
  • 【JAVA】阿里云百炼平台对接DeepSeek-V3大模型使用详解
  • springboot项目部署脚本
  • 黑马Java面试教程_P5_微服务
  • 使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph
  • 生成式AI项目的生命周期
  • SOC-ATF 安全启动BL1流程分析(1)
  • 游戏引擎学习第127天
  • Grafana使用日志7--开启Sigv4