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

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

0. 导入相关依赖



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

}

2. FTP模拟测试环境搭建

通过FileZilla安装模拟环境:
a. 打开FileZilla的下载中心,下载服务器
Java 使用FTP上传文件 并 模拟接受_第1张图片
b. 选择合适的版本后,直接傻瓜式安装
c. 配置相关数据

相关操作流程如下:

Java 使用FTP上传文件 并 模拟接受_第2张图片

编辑—>用户
用户名和密码粗略设置如下图所示
Java 使用FTP上传文件 并 模拟接受_第3张图片
通过FTP上传到的文件位置可按个人情况进行设置,勾选相关权限
Java 使用FTP上传文件 并 模拟接受_第4张图片
以上配置即可满足测试要求,进一步的东西大家可根据需求自行研究,也欢迎留言交流!

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工具类库,通过静态方法封装,降低相关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/#/

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

https://jingyan.baidu.com/article/0a52e3f4e53ca1bf63ed725c.html

你可能感兴趣的:(SpringBoot,Maven,java,intellij,idea,ftp,maven)