由于项目中使用到了ftp上传文件,所以这里给大家分享下JAVA的工具类之FTP上传文件。网上其实有很多FTP上传文件的例子,但是大部分都是教大家使用文件的配置方式去处理,由于我们的项目是分环境的,所以在这里改造下,直接使用注解的方式,把信息注入进来,分不同的配置文件加载。不多说,直接上代码:
package com.umall.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
@Component
@Slf4j
public class FTPUploadUtils {
private FTPClient ftpClient;
@Value("${ftp.server.host}")
private String ftpHost;
@Value("${ftp.server.port}")
private Integer ftpPort;
@Value("${ftp.server.username}")
private String ftpUserName;
@Value("${ftp.server.password}")
private String ftpPassword;
@Value("${ftp.server.basedir}")
private String ftpBaseDir;
/**
* 本地字符编码
*/
private final static String LOCAL_CHARSET = "UTF-8";
/**
* FTP协议里面,规定文件名编码为iso-8859-1
*/
private final static String SERVER_CHARSET = "ISO-8859-1";
@PostConstruct
public void init() {
try {
ftpClient = new FTPClient();
ftpClient.connect(ftpHost, ftpPort);
ftpClient.login(ftpUserName, ftpPassword);
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
ftpClient.disconnect();
throw new RuntimeException("400 FTP连接失败");
}
// 被动模式
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory());
ftpClient.setRemoteVerificationEnabled(false);
// 设置文件传输模式为二进制,可以保证传输的内容不会被改变
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置连接超时时间
ftpClient.setConnectTimeout(1000 * 30);
// 设置ftp字符集
ftpClient.setControlEncoding("UTF-8");
ftpClient.makeDirectory(ftpBaseDir);
ftpClient.changeWorkingDirectory(ftpBaseDir);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public void uploadFile(File file) throws Exception {
InputStream inputStream = new FileInputStream(file);
// 进入到文件保存的目录 保存文件
Boolean isSuccess = ftpClient.storeFile(new String(file.getName().getBytes(LOCAL_CHARSET), SERVER_CHARSET), inputStream);
inputStream.close();
log.info("FTP上传文件状态:{}", isSuccess);
}
}这里需要引入对应的ftpjar包
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.8.0</version> </dependency>
配置文件示例:
## ftp config ftp.server.host=192.168.31.10 ftp.server.port=21 ftp.server.username=root ftp.server.password=123456 ftp.server.basedir=/app/develop/ftp/police1/upload1/









还没有评论,来说两句吧...