FtpUtil.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.jjt.common.utils;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.extra.ftp.Ftp;
  4. import cn.hutool.extra.ftp.FtpMode;
  5. import com.jjt.common.constant.Constants;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8. import lombok.NoArgsConstructor;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import java.io.File;
  12. import java.util.List;
  13. /**
  14. * Ftp上传下载工具类
  15. *
  16. * @author wukai
  17. * @date 2023-06-08
  18. */
  19. @Data
  20. @NoArgsConstructor
  21. @AllArgsConstructor
  22. public class FtpUtil {
  23. private static final Logger log = LoggerFactory.getLogger(FtpUtil.class);
  24. /**
  25. * FTP服务器IP地址
  26. */
  27. private String ip;
  28. /**
  29. * FTP服务器端口号
  30. */
  31. private Integer port;
  32. /**
  33. * FTP服务器用户名
  34. */
  35. private String user;
  36. /**
  37. * FTP服务器密码
  38. */
  39. private String pass;
  40. /**
  41. * 远程文件夹目录
  42. */
  43. private String dir;
  44. /**
  45. * 下载ftp服务器上的文件到本地
  46. *
  47. * @param localDir 本地目录
  48. * @return 成功则返回true
  49. */
  50. public Boolean download(String localDir) {
  51. if (StringUtils.isBlank(localDir)) {
  52. log.error("本地保存路径及名称不能为空");
  53. return false;
  54. }
  55. if (!dir.endsWith(Constants.DIR_END)) {
  56. dir += "/";
  57. }
  58. if (!localDir.endsWith(Constants.DIR_END)) {
  59. localDir += "/";
  60. }
  61. try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) {
  62. // 设置传输模式为被动模式(可根据需要修改)
  63. ftp.setMode(FtpMode.Passive);
  64. // 获取目录下的文件列表
  65. List<String> fileList = ftp.ls(dir);
  66. // 下载目录下的文件
  67. for (String fileName : fileList) {
  68. ftp.download(dir + fileName, FileUtil.file(localDir, fileName));
  69. }
  70. return true;
  71. } catch (Exception e) {
  72. log.error("下载文件失败啦:", e.getMessage());
  73. return false;
  74. }
  75. }
  76. /**
  77. * 目录上传至FTP
  78. *
  79. * @param localDir 本地目录
  80. * @return 成功则返回 true
  81. */
  82. public Boolean upload(String localDir) {
  83. if (!dir.endsWith(Constants.DIR_END)) {
  84. dir += "/";
  85. }
  86. if (StringUtils.isBlank(localDir)) {
  87. log.error("本地文件名称不能为空");
  88. return false;
  89. }
  90. File dirFile = new File(localDir);
  91. if (dirFile.isDirectory()) {
  92. try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) {
  93. // 设置传输模式为被动模式(可根据需要修改)
  94. ftp.setMode(FtpMode.Passive);
  95. File[] files = dirFile.listFiles();
  96. //获取目录下所有文件
  97. for (File file : files) {
  98. ftp.upload(dir, file);
  99. }
  100. } catch (Exception e) {
  101. log.error("上传出错啦", e.getMessage());
  102. return false;
  103. }
  104. }
  105. return true;
  106. }
  107. /**
  108. * 单个文件上传至FTP
  109. *
  110. * @param file 要上传的文件
  111. * @return 成功则返回 true
  112. */
  113. public Boolean upload(File file) {
  114. if (!dir.endsWith(Constants.DIR_END)) {
  115. dir += "/";
  116. }
  117. try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) {
  118. // 设置传输模式为被动模式(可根据需要修改)
  119. ftp.setMode(FtpMode.Passive);
  120. return ftp.upload(dir, file);
  121. } catch (Exception e) {
  122. log.error("上传出错啦", e.getMessage());
  123. return false;
  124. }
  125. }
  126. /**
  127. * 删除远程服务器上的文件
  128. *
  129. * @return 成功则返回 true
  130. */
  131. public Boolean delete() {
  132. if (!dir.endsWith(Constants.DIR_END)) {
  133. dir += "/";
  134. }
  135. try (Ftp ftp = new Ftp(ip, port == null ? 21 : port, user, pass)) {
  136. // 设置传输模式为被动模式(可根据需要修改)
  137. ftp.setMode(FtpMode.Passive);
  138. // 获取目录下的文件列表
  139. List<String> fileList = ftp.ls(dir);
  140. // 下载目录下的文件
  141. for (String fileName : fileList) {
  142. ftp.delFile(dir + fileName);
  143. }
  144. } catch (Exception e) {
  145. log.error("删除出错啦", e.getMessage());
  146. return false;
  147. }
  148. return true;
  149. }
  150. }