package com.jjt.common.utils; import cn.hutool.core.io.FileUtil; import cn.hutool.extra.ftp.Ftp; import cn.hutool.extra.ftp.FtpMode; import com.jjt.common.constant.Constants; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.List; /** * Ftp上传下载工具类 * * @author wukai * @date 2023-06-08 */ @Data @NoArgsConstructor @AllArgsConstructor public class FtpUtil { private static final Logger log = LoggerFactory.getLogger(FtpUtil.class); /** * FTP服务器IP地址 */ private String ip; /** * FTP服务器端口号 */ private Integer port; /** * FTP服务器用户名 */ private String user; /** * FTP服务器密码 */ private String pass; /** * 远程文件夹目录 */ private String dir; /** * 下载ftp服务器上的文件到本地 * * @param localDir 本地目录 * @return 成功则返回true */ public Boolean download(String localDir) { if (StringUtils.isBlank(localDir)) { log.error("本地保存路径及名称不能为空"); return false; } if (!dir.endsWith(Constants.DIR_END)) { dir += "/"; } if (!localDir.endsWith(Constants.DIR_END)) { localDir += "/"; } try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) { // 设置传输模式为被动模式(可根据需要修改) ftp.setMode(FtpMode.Passive); // 获取目录下的文件列表 List fileList = ftp.ls(dir); // 下载目录下的文件 for (String fileName : fileList) { ftp.download(dir + fileName, FileUtil.file(localDir, fileName)); } return true; } catch (Exception e) { log.error("下载文件失败啦:", e.getMessage()); return false; } } /** * 目录上传至FTP * * @param localDir 本地目录 * @return 成功则返回 true */ public Boolean upload(String localDir) { if (!dir.endsWith(Constants.DIR_END)) { dir += "/"; } if (StringUtils.isBlank(localDir)) { log.error("本地文件名称不能为空"); return false; } File dirFile = new File(localDir); if (dirFile.isDirectory()) { try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) { // 设置传输模式为被动模式(可根据需要修改) ftp.setMode(FtpMode.Passive); File[] files = dirFile.listFiles(); //获取目录下所有文件 for (File file : files) { ftp.upload(dir, file); } } catch (Exception e) { log.error("上传出错啦", e.getMessage()); return false; } } return true; } /** * 单个文件上传至FTP * * @param file 要上传的文件 * @return 成功则返回 true */ public Boolean upload(File file) { if (!dir.endsWith(Constants.DIR_END)) { dir += "/"; } try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) { // 设置传输模式为被动模式(可根据需要修改) ftp.setMode(FtpMode.Passive); return ftp.upload(dir, file); } catch (Exception e) { log.error("上传出错啦", e.getMessage()); return false; } } /** * 删除远程服务器上的文件 * * @return 成功则返回 true */ public Boolean delete() { if (!dir.endsWith(Constants.DIR_END)) { dir += "/"; } try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) { // 设置传输模式为被动模式(可根据需要修改) ftp.setMode(FtpMode.Passive); // 获取目录下的文件列表 List fileList = ftp.ls(dir); // 下载目录下的文件 for (String fileName : fileList) { ftp.delFile(dir + fileName); } } catch (Exception e) { log.error("删除出错啦", e.getMessage()); return false; } return true; } }