Java使用FTP上传文件并模拟接受的方法

网友投稿 290 2022-11-03


Java使用FTP上传文件并模拟接受的方法

0. 导入相关依赖

http://

commons-net

commons-net

3.6

cn.hutool

hutool-all

5.3.7

org.projectlombok

lombok

1.18.16

1. 文件上传代码

@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,fileInfhttp://o,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)){

if(ftpClient.listFiles(saveName).length != 0){ //检查文件是否已经存在

boolean deleteFlag = ftpClient.deleteFile(saveName);

log.info(deleteFlag?"文件已存在,直接删除":"存在同名文件且无法删除,请检查权限");

}

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);

}

}

}

}

2. FTP模拟测试环境搭建

通过FileZilla安装模拟环境:

a. 打开FileZilla的下载中心,下载服务器

b. 选择合适的版本后,直接傻瓜式安装

c. 配置相关数据

相关操作流程如下:

编辑—>用户

用户名和密码粗略设置如下图所示

通过FTP上传到的文件位置可按个人情况进行设置,勾选相关权限

以上配置即可满足测试要求,进一步的东西大家可根据需求自行研究,也欢迎留言交流!

3. 测试代码

//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);

4. 测试效果

附录1 :Hutool

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关dAvtahamoAPI的学习成本,提高工作效率,使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://hutool.cn/docs/#/

附录2:IntelliJ IDEA lombok插件的安装和使用


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:双色球开机号查询API(双色球开机号查询结果)
下一篇:往年高考成绩查询API(往年高考成绩查询山东)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~