commons-net
commons-net
3.6
cn.hutool
hutool-all
5.3.7
org.projectlombok
lombok
1.18.16
@Component
@Slf4j
public class FTPTools {
/**
* 文件上传
* @param hostname 域名地址
* @param port 端口号
* @param username 用户名
* @param password 密码
* @param fileInfo 待上传的文件
* @param uploadPath 待上传到的路径
* @param saveName 预保存的文件名
* @return
*/
public static boolean upload(String hostname,int port,String username,String password,String fileInfo,String uploadPath,String saveName){
boolean flag = false;
FTPClient ftpClient = null;
try {
ftpClient = new FTPClient();
ftpClient.connect(hostname,port);
//每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据
ftpClient.enterLocalPassiveMode();
//设置二进制传输
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setControlEncoding("UTF-8");
if(ftpClient.login(username,password)){
//若连接成功
log.info("成功登录到ftp服务端,开始文件上传");
flag = sendFile(ftpClient,fileInfo,uploadPath,saveName);
}else{
log.error("登录到ftp服务端失败,请检查用户名和密码");
}
disconnect(ftpClient);
}catch (SocketException e) {
log.error("文件{}上传失败:{}",saveName,e.getMessage());
} catch (IOException e) {
log.error("文件{}上传失败:{}",saveName,e.getMessage());
} finally {
}
return flag;
}
/**
* 文件传输
* @param fileInfo
* @param uploadPath
* @param saveName
* @return
*/
private static boolean sendFile(FTPClient ftpClient, String fileInfo, String uploadPath, String saveName) throws FileNotFoundException,IOException{
boolean flag = false;
try(FileInputStream fileInputStream = new FileInputStream(fileInfo)){
//检查工作目录是否存在
if(ftpClient.changeWorkingDirectory(uploadPath)){
flag = ftpClient.storeFile(saveName,fileInputStream);
log.info(flag?"文件上传成功!":"文件上传失败!");
}else{
log.error("找不到要上传的目录");
}
}catch (FileNotFoundException e){
log.error("找不到要上传的文件{}:{}",fileInfo,e.getMessage());
throw e;
}catch (IOException e){
log.error("文件传输异常:{}",e.getMessage());
throw e;
}
return flag;
}
/**
* 断开ftp连接
* @param ftpClient
*/
private static void disconnect(FTPClient ftpClient) {
if (ftpClient.isConnected()){
try{
ftpClient.disconnect();
log.info("ftp连接已关闭,文件上传结束");
}catch (IOException e){
log.error("ftp连接关闭失败:{}",e);
}
}
}
}
通过FileZilla安装模拟环境:
a. 打开FileZilla的下载中心,下载服务器
b. 选择合适的版本后,直接傻瓜式安装
c. 配置相关数据
相关操作流程如下:
编辑—>用户
用户名和密码粗略设置如下图所示
通过FTP上传到的文件位置可按个人情况进行设置,勾选相关权限
以上配置即可满足测试要求,进一步的东西大家可根据需求自行研究,也欢迎留言交流!
//ftp配置信息
String hostname = "127.0.0.1"; //域名地址
int port = 21; //端口号
String username = "lmh"; //用户名
String password = "123456"; //密码
String fileInfo = "E:\\Temporary\\1.file"; //待上传的文件目录
String uploadPath = "/"; //待上传到的路径
String saveName = FTP+ "_" + DateUtil.format(new Date(),"yyyyMMdd"); //预保存的文件名
FTPTools.upload(hostname, port, username, password, fileInfo, uploadPath, saveName);
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
就比如
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String date = sdf.format(new Date());
可以通过Hutool简化为
String date = DateUtil.format(new Date(),"yyyyMMdd");
类似的例子很多大家可以自己去官网看,文档清晰明了:https://www.hutool.cn/docs/#/
https://jingyan.baidu.com/article/0a52e3f4e53ca1bf63ed725c.html