IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot ftp上传 -> 正文阅读

[Java知识库]springboot ftp上传

springboot ftp上传

一、搭建ftp服务

基础环境docker docker-compose

1、创建docker-compose.yml

version: '3'
services:
  vsftpd:
    image: fauria/vsftpd
    hostname: vsftpd
    container_name: vsftpd
    restart: always
    environment:
      - FTP_USER=root
      - FTP_PASS=123456
      - PASV_ADDRESS=192.168.0.90
      - PASV_MIN_PORT=21100
      - PASV_MAX_PORT=21110
    volumes:
      - /home/uploadfile/upgrade:/home/vsftpd/root
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
    ports:
      - "20:20"
      - "21:21"
      - "21100-21110:21100-21110"
    privileged: true

2、启动ftp服务器

docker-compose up -d

3、测试连接ftp

在文件夹 地址栏输入 ftp://192.168.0.90

在这里插入图片描述

在这里插入图片描述

连接成功

在这里插入图片描述

二、springboot ftp上传

1、引入pom

  <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

2、配置yml

magic:
  export:
    ftpIp: 192.168.0.90
    ftpPort: 21
    ftpUser: root
    ftpPass: 123456
#    remotePath: /xxx

3、FtpProperties

@Data
@Component
@ConfigurationProperties("magic.export")
public class FtpProperties {

    private String ftpIp;
    private Integer ftpPort;
    private String ftpUser;
    private String ftpPass;
    private String remotePath="/magic";
    // FTP协议里面,规定文件名编码为iso-8859-1
    private String serverCharset="ISO-8859-1";
}

4、FtpUtilComponent

/**
 * @author liuhaomin
 * @date 2022/5/10
 */
@Data
@Slf4j
@Component
public class FtpUtilComponent {

    @Autowired
    private FtpProperties ftpProperties;

    private boolean connectServer(FTPClient ftpClient){
        Boolean isSuccess=false;
        try {
            ftpClient.connect(ftpProperties.getFtpIp(),ftpProperties.getFtpPort());
            isSuccess=ftpClient.login(ftpProperties.getFtpUser(),ftpProperties.getFtpPass());
        } catch (IOException e) {
            log.error("连接ftp服务器失败 参数 {} 异常{}", ftpProperties.toString(),e);
        }
        return isSuccess;
    }

    public boolean uploadFile(String remotePath, List<File> fileList) throws IOException {
        boolean upload=true;
        FTPClient ftpClient = new FTPClient();
        FileInputStream fileInputStream=null;
        //connect to ftpServer
        if (connectServer(ftpClient)){
            try {
                ftpClient.changeWorkingDirectory(remotePath);
                ftpClient.setBufferSize(1024);
                ftpClient.setControlEncoding("UTF-8");
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();
                for (File fileItem:fileList
                ) {
                    fileInputStream=new FileInputStream(fileItem);
                    ftpClient.storeFile(fileItem.getName(),fileInputStream);
                }
            } catch (IOException e) {
                log.error("上传文件异常",e);
                upload=false;
            }finally {
                fileInputStream.close();
                ftpClient.disconnect();
            }
        }
        return upload;
    }
    private static String ZN_CHARSET = "GBK";
    private static String LOCAL_CHARSET = "GBK";

    public boolean uploadToFtp(String remotePath, String fileName, File file) throws IOException {
        boolean upload = true;
        FTPClient ftpClient = new FTPClient();
        //connect to ftpServer
        if (connectServer(ftpClient)) {
            try {
                String newFileName = new String(fileName.getBytes(ZN_CHARSET),ftpProperties.getServerCharset());
                if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
                    LOCAL_CHARSET = "UTF-8";
                }
                ftpClient.setControlEncoding(LOCAL_CHARSET);
                ftpClient.changeWorkingDirectory(remotePath);
                ftpClient.setBufferSize(1024);
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();
                //上传文件 参数:上传后的文件名,输入流
                upload = ftpClient.storeFile(newFileName, new FileInputStream(file));
                log.info("{} 文件导入 {} 路径 成功",fileName,remotePath);
            } catch (IOException e) {
                log.error("{} 文件导入 {} 路径 失败{}",fileName,remotePath,e);
                upload = false;
            } finally {
                ftpClient.disconnect();
            }
        }
        return upload;
    }
}

5、FtpControllerTest测试类

  @Test
    public void demo() {
        File file = new File("D:\\Dept\\README.md");
        String name = file.getName();
        String fileName= "中文2sas"+name.substring(name.lastIndexOf("."));
        try {
            ftpUtilComponent.uploadToFtp(ftpUtilComponent.getFtpProperties().getRemotePath(),fileName,file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

6、测试成功

在这里插入图片描述
代码下载

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:20:27  更:2022-05-12 16:22:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:18:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码