点击关注公众号,更多资讯及时推送↓
在企业应用中,将文件推送到 FTP 服务器是一个常见的需求。本文将介绍如何在 Spring Boot 项目中实现将文件推送到 FTP 服务器,包括引入依赖、自定义配置和编写代码示例。

1. 引入依赖

首先,在 Spring Boot 项目的 pom.xml 文件中引入 Apache Commons Net 依赖,它是一个用于处理 FTP 操作的库:
<dependency>    <groupId>commons-net</groupId>    <artifactId>commons-net</artifactId>    <version>3.8.0</version></dependency>

2. 自定义 FTP 配置

创建一个配置类 FTPConfig,用于配置 FTP 连接的相关参数:
import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Configuration;@Configuration@ConfigurationProperties(prefix = "ftp")public class FTPConfig {    private String server;    private int port;    private String user;    private String password;    // Getters and Setters    public String getServer() {        return server;    }    public void setServer(String server) {        this.server = server;    }    public int getPort() {        return port;    }    public void setPort(int port) {        this.port = port;    }    public String getUser() {        return user;    }    public void setUser(String user) {        this.user = user;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}
application.yml 文件中添加 FTP 服务器的相关配置:
ftp:  server: ftp.example.com  port: 21  user: ftpuserpassword:ftppassword

3. 实现 FTP 服务类

创建一个服务类 FTPService,用于连接 FTP 服务器并上传文件:
import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;import java.io.InputStream;@Servicepublic class FTPService {    @Autowired    private FTPConfig ftpConfig;    public void uploadFile(String remotePath, MultipartFile file) throws IOException {        FTPClient ftpClient = new FTPClient();        try {            ftpClient.connect(ftpConfig.getServer(), ftpConfig.getPort());            ftpClient.login(ftpConfig.getUser(), ftpConfig.getPassword());            ftpClient.enterLocalPassiveMode();            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);            try (InputStream inputStream = file.getInputStream()) {                boolean done = ftpClient.storeFile(remotePath, inputStream);                if (done) {                    System.out.println("File " + file.getOriginalFilename() + " has been uploaded successfully.");                } else {                    throw new IOException("Failed to upload file " + file.getOriginalFilename());                }            }        } finally {            if (ftpClient.isConnected()) {                ftpClient.logout();                ftpClient.disconnect();            }        }    }}

4. 编写控制器类

创建一个控制器类 FTPController,用于处理文件上传请求并调用 FTPService 进行文件上传:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;@RestControllerpublic class FTPController {    @Autowired    private FTPService ftpService;    @PostMapping("/uploadFile")    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {        try {            String remotePath = "/uploads/" + file.getOriginalFilename();            ftpService.uploadFile(remotePath, file);            return new ResponseEntity<>("File uploaded successfully", HttpStatus.OK);        } catch (IOException e) {            return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);        }    }}

完整代码结构

src
├── main
│   ├── java
│   │   └── com
│   │       └── example
│   │           └── ftp
│   │               ├── FTPApplication.java
│   │               ├── FTPConfig.java
│   │               ├── FTPService.java
│   │               └── FTPController.java
│   └── resources
│└──application.yml

测试上传文件到 FTP 服务器

启动 Spring Boot 应用程序,使用 Postman 或类似工具发送 POST 请求至以下 URL,并上传要推送到 FTP 服务器的文件:
POSThttp://localhost:8080/uploadFile
请求参数:
  • file: 上传的文件。

总结

通过本文,我们成功地在 Spring Boot 项目中实现了将文件推送到 FTP 服务器的功能。我们通过引入 Apache Commons Net 依赖、自定义 FTP 配置、创建 FTP 服务类和控制器类,实现了文件的上传和管理。这种方式可以帮助我们在各种应用场景中将文件高效地推送到 FTP 服务器,方便文件的存储和共享。

需要面试BAT,码农这里整理一份面试资料1000道 互联网Java工程师面试题 485页,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复Java领取,更多内容陆续奉上。

PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。

“在看”支持码农呀,谢谢啦

本篇文章来源于微信公众号: 新生代码农



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2024-08-02