Springboot文件上传至FTP服务器
1. 引入依赖
在pom.xml中引入Apache Commons Net
依赖,它是专门处理FTP操作的一个库
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.10.0</version>
</dependency>
2. 自定义FTP配置
- 首先在
application.xml
中添加FTP服务器相关配置
ftp:
server: ftp.example.com
port: 21
user: ftpusername
password: ftppassword
- 创建配置实体类
FTPConfig
,用于配置服务器连接相关参数信息
@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;
}
}
3. 编写FTPUtils工具类
public class FTPUtils {
public void uploadFile(String remotePath, MultipartFile file) throws IOException {
FTPClient ftpClient = new FTPClient();
FTPConfig ftpConfig = new FTPConfig();
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();
}
}
}
}