spring boot 连接FTP实现文件上传

ops/2025/3/1 17:12:16/

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.ppmy.cn/ops/162284.html

相关文章

冒泡排序算法优化

一 概述 冒泡排序是一种简单的交换排序算法,其核心思想是通过相邻元素比较和交换将最大元素逐步移动到数组末尾。 二、基础冒泡排序 void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if…

Spring Boot环境配置

一、Java开发环境 确保你的计算机已经安装了Java Development Kit&#xff08;JDK&#xff09;。建议使用JDK 17&#xff0c;可以从Oracle官方网站上下载并安装。 1.下载及配置环境变量 &#xff08;1&#xff09;下载JDK&#xff1a;官网下载 &#xff08;2&#xff09;运…

深度学习-136-LangGraph之应用实例(五)构建RAG问答系统同时从不同的角度对比优化效果

文章目录 1 大语言模型2 小粒度分割文档2.1 处理文本构建Document2.2 向量存储2.3 创建图2.4 测试调用3 大粒度分割文档3.1 构建Document3.2 向量存储3.3 创建图3.4 测试调用4 总结与优化4.1 问题分析4.2 对比不同的返回文档数4.3 对比不同的嵌入模型4.3.1 嵌入模型nomic-embed…

【GESP】C++二级真题 luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵

GESP二级真题&#xff0c;多层循环和分支练习&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-2-luogu-b4037/ 【GESP】C二级真题 luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵 | OneCoderGESP二级真题&#xff0c;多层循环和分支练习…

一个多端阅读小说精品屋

novel-plus 是一个多端&#xff08;PC、WAP&#xff09;阅读&#xff0c;功能完善的原创文学 CMS 系统。由前台门户系统、作家后台管理系统、平台后台管理系统和爬虫管理系统等多个子系统构成&#xff0c;包括小说推荐、作品检索、小说排行、小说阅读、小说评论、会员中心、作家…

多维模型数据库(OLAP)和列式数据库的区别

OLAP&#xff08;在线分析处理&#xff09;和列式数据库虽然在某些场景下有重叠&#xff0c;但它们是不同的概念&#xff0c;各自有不同的目的和特点。下面我将通过举例来详细说明它们之间的区别&#xff1a; 1. OLAP&#xff08;多维数据分析&#xff09; OLAP 是一种用于数…

从0-1学习Mysql第五章: 索引与优化

第5章: 索引与优化 在数据库系统中&#xff0c;索引就像书籍的目录&#xff0c;能够帮助我们快速定位到所需的数据。本章详细讲解了索引的概念、常见索引类型、创建与删除方法、优化作用、查询优化技巧以及执行计划&#xff08;EXPLAIN&#xff09;的使用。同时&#xff0c;我…

Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用

1. 信号与槽机制的基本原理 在 Qt 中&#xff0c;信号与槽机制是一种事件驱动的通信方式&#xff0c;用于对象之间的解耦交互。其关键特点如下&#xff1a; 信号不能直接调用 信号只是一个声明&#xff0c;并没有实际的函数实现。它们通过 emit 关键字在对象内部被触发&…