由于项目中使用到了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/
还没有评论,来说两句吧...