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

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.kler.cn/a/563252.html

相关文章:

  • 汽车制造又一革新:Profinet-EtherCAT实现高精度激光焊接
  • 3DM转换成PLY
  • Linux 有哪些特殊虚的拟文件系统,有什么作用?
  • Linux运维——硬件管理
  • 从Excel到Hadoop:数据规模的进化之路
  • 技术速递|.NET 9 网络优化
  • (满血)Cherry Stduio部署火山引擎DeepSeek
  • Uniapp 小程序复制、粘贴功能实现
  • 电影级质量和动态运动的视频生成框架Magic Mirror,利用视频扩散模型生成合成身份配对的视频数据
  • 深度学习重要论文阅读笔记 ResNet (2025.2.26)
  • 如何实现将http请求转化为rpc请求
  • 微信小程序数据缓存与本地存储:优化用户体验
  • FastJSON 默认行为:JSON.toJSONString 忽略 null 字段
  • pytorch基础 nn.embedding
  • H3C商场无线零售解决方案技术资料汇总集
  • 使用Python开发PDF文本提取工具
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(四) 实现注册功能
  • 基于Matlab的语音识别系统设计
  • nginx基础篇 - 什么是代理服务器?正向代理和反向代理的区别?
  • 【语法】C++的string