【Ftp客户端】FTPBox starter

  • Github: https://github.com/lihewei7/ftpbox-spring-boot-starter
  • Gitee: https://gitee.com/lihewei7/ftpbox-spring-boot-starter

    文章目录

      • FTPBox是什么?
      • Maven依赖
      • 使用
      • API
        • upload
        • download
        • exists
        • list
        • execute
        • executeWithoutResult
      • 配置
        • 单主机配置
        • 多主机配置
        • 多Host使用手册

FTPBox是什么?

FTPBox 是一个基于 FTP协议的 SpringBoot Starter,主要包含了:文件上传、下载、校验、查看等功能,为用户提供了一种安全的方式来发送和接收文件和文件夹。使用池技术管理FTP连接,避免频繁创建新连接造成连接耗时问题,提供和 FtpTemplate 方便用户在 SpringBoot 项目中快速使用。

Maven依赖

<dependency><groupId>io.github.lihewei7</groupId><artifactId>ftpbox-spring-boot-starter</artifactId><version>1.0.3</version>
</dependency>
毕业版本描述
v1.0.0Version initialization
v1.0.1Version optimization
v1.0.2Optimize configuration information
v1.0.3Standardization to name

使用

  1. 导入 FTPBox 依赖
  2. 应用中添加服务器配置
  3. 查看 API 按需使用
@Component
public class XXXService {@Autowiredprivate FtpTemplate ftpTemplate;public void downloadFileWork(String from, String to) throws Exception {ftpTemplate.download(from, to);}public void uploadFileWork(String from, String to) throws Exception {ftpTemplate.upload(from, to);}
}

API

upload

上传文件,该方法会递归创建上传的远程文件所在的父目录。

// 上传 D:\\a.docx 到 /home/ftpbox/a.docx
ftpTemplate.upload("D:\\a.docx", "/home/ftpbox/aptx4869.docx");// 上传 D:\\a.pdf 到 /root/ftpbox/a.pdf
ftpTemplate.upload("D:\\a.pdf", "ftpbox/a.pdf");// 上传 D:\\a.doc 到 /root/a.doc
ftpTemplate.upload("D:\\a.doc", "a.doc");

download

下载文件,该方法只会创建下载的本地文件,不会创建本地文件的父目录。

// 下载 /home/ftpbox/b.docx 到 D:\\b.docx
ftpTemplate.download("/home/ftpbox/b.docx", "D:\\b.docx");// 下载 /root/ftpbox/b.pdf 到 D:\\b.pdf
ftpTemplate.download("ftpbox/b.pdf", "D:\\b.pdf");// 下载 /root/b.doc 到 D:\\b.doc
ftpTemplate.download("b.doc", "D:\\b.doc");

exists

校验文件是否存在,存在返回true,不存在返回false

// 测试 /home/ftpbox/c.docx 是否存在
boolean result1 = ftpTemplate.exists("/home/ftpbox/c.pdf");
// 测试 /root/ftpbox/c.docx 是否存在
boolean result2 = ftpTemplate.exists("ftpbox/c.docx");
// 测试 /root/c.docx 是否存在
boolean result3 = ftpTemplate.exists("c.doc");

list

查看文件/目录

// 查看文件 /home/ftpbox/d.pdf
LsEntry[] list1 = ftpTemplate.list("/home/ftpbox/d.pdf");
// 查看文件 /root/ftpbox/d.docx
LsEntry[] list2 = ftpTemplate.list("ftpbox/d.docx");
// 查看文件 /root/d.doc
LsEntry[] list3 = ftpTemplate.list("d.doc");// 查看目录 /home/ftpbox
LsEntry[] list4 = ftpTemplate.list("/home/ftpbox");
// 查看目录 /root/ftpbox
LsEntry[] list5 = ftpTemplate.list("ftpbox");

execute

execute(FtpCallback<T> action) 用于执行自定义 FTP 操作,比如查看 FTP 默认目录(ftpClient 的其他用途,请参考 edtFTPj 的 API)

String dir = ftpTemplate.execute(ftpClient::pwd);
//或
String dir2 = ftpTemplate.execute(ftpClient -> pwd());

executeWithoutResult

executeWithoutResult(FtpCallbackWithoutResult action)用于执行自定义没有返回值的FTP操作,比如查看默认的 FTP目录(ftpClient 的其他用途,请参考 edtFTPj 的 API)

String localPath = "/home/lihw/local/";
String remoteFile = "remote1.txt";
ftpTemplate.executeWithoutResult(ftpClient -> System.out.println(ftpClient.get(localPath,remoteFile)));

配置

单主机配置

  • ftp基本配置(密码登录)
ftp:host: localhostport: 22username: rootpassword: 1234
  • 连接池配置(可不配置使用默认值)
ftp:pool:min-idle: 1max-idle: 8max-active: 8max-wait: -1test-on-borrow: truetest-on-return: falsetest-while-idle: truetime-between-eviction-runs: 600000min-evictable-idle-time-millis: 1800000

多主机配置

在多 Host 使用 FtpTemplate 需要为 FTPBox 指定将要使用的主机,详细操作见下方API。hosts 下可配置多台主机。rd-1为主机名(ftp.hosts 下 map 中的 key 代表 hostName ,可自定义主机名)

  • 多 host ,密码登录
ftp:hosts:rd-1:host: 127.0.0.1port: 22username: lihwpassword: 1234rd-2:host: 127.0.0.2port: 22username: lihwpassword: 1234
  • 多 host ,密码 + 密钥登录方式

  • 多 Host 连接池配置(可不配置使用默认值)

ftp:pool:min-idle-per-key: 1max-idle-per-key: 8max-active-per-key: 8max-active: 8max-wait: -1test-on-borrow: truetest-on-return: falsetest-while-idle: truetime-between-eviction-runs: 600000min-evictable-idle-time-millis: 1800000

多Host使用手册

  • HostsManage.changeHost(hostname) :通过 hostName 指定下次使用的连接。注意它只能指定下一次的连接!!!
HostsManage.changeHost("rd-1");
// 成功打印 rd-1 对应连接的原始目录
ftpTemplate.execute(ftpClient::pwd);
// 第二次执行失败,抛出空指针,需要再次指定对应连接才能继续使用
ftpTemplate.execute(ftpClient::pwd);
  • HostsManage.changeHost(hostname, boolean):连续使用相同 host 进行操作,避免执行一次 FtpTemplate 就要设置一次 hostName。注意要配合 HostHolder.clearHost() 使用!!!
HostsManage.changeHost("rd-1", false);
try {ftpTemplate.upload("D:\\a.docx", "/home/ftpbox/a.docx");ftpTemplate.upload("D:\\b.pdf", "ftpbox/b.pdf");ftpTemplate.upload("D:\\c.doc", "c.doc");
} finally {HostsManage.clearHost();
}
  • HostsManage.hostNames() 与 :获取所有的 host 连接的 name
//有时需要批量执行配置的 n 个 host 连接,此时可以通过该方法获取所有或过滤后的 hostName 集合。
for (String hostName : HostsManage.hostNames()) {HostsManage.changeHost(hostName);ftpTemplate.upload("D:\\a.docx", "/home/ftpbox/a.docx");
}
  • HostsManage.hostNames(Predicate<String>):获取过滤后的 host 连接的 name
// 获取所有以“rd-”开头的 hostName
for (String hostName : HostsManage.hostNames(s -> s.startsWith("rd-"))) {HostsManage.changeHost(hostName);ftpTemplate.upload("D:\\a.docx", "/home/ftpbox/a.docx");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456243.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery写表格,通过后端传值,并合并单元格

<!DOCTYPE html> <html> <head><title>Table Using jQuery</title><style>#tableWrapper {width: 100%;height: 200px; /* 设置表格容器的高度 */overflow: auto; /* 添加滚动条 */margin-top: -10px; /* 负的外边距值&#xff0c;根据实际…

基于SSM的便民自行车管理系统的开发与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的便民自行车管理系统的开发与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

mac检查CPU温度和风扇速度软件:Macs Fan Control Pro 1.5.17中文版

Macs Fan Control Pro for Mac是一款专业的电脑风扇控制工具&#xff0c;旨在帮助Mac用户有效控制电脑的风扇速度&#xff0c;提高电脑的运行效率和稳定性。 软件下载&#xff1a;Macs Fan Control Pro 1.5.17中文版 该软件支持多种风扇控制模式和预设方案&#xff0c;用户可以…

day04.C++库函数(常用)

目录 一.常用数学函数 #include / #include 二.常用字符串处理函数 #include / #include 2.1常见的内存函数&#xff1a; &#xff08;1&#xff09;memcpy库函数 (2)memcmp库函数 (3)memset 2.2字符串常见库函数 &#xff08;1&#xff09;strlen (2)strcpy 三、其他常…

IPv4之后直接是IPv6,为何没有IPv5?

网络协议中,我们经常看到IPv4和IPv6,有点人可能会问为啥不提IPv5,是没有还是其他原因?下面我来给大伙普及一下,有不对之处还请指正。 一、什么是IPv4和IPv6 IPv4和IPv6都是互联网协议(Internet Protocol)的版本,用于规定网络设备进行通信时使用的标准格式。IPv4是互联…

每日一题(づ ̄3 ̄)づ╭❤~(数字在升序数组中出现的次数,整数转换)

# define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int arr[] {1,3,3,4,5,5,5,7};int n 0;int count 0;int szsizeof(arr)/sizeof(arr[0]);printf("请输入你要查找的数值&#xff1a;\n");scanf("%d", &n);for (int i 0; i &…

flask+vue+python跨区通勤人员健康体检预约管理系统

跨区通勤人员健康管理系统设计的目的是为用户提供体检项目等功能。 与其它应用程序相比&#xff0c;跨区通勤人员健康的设计主要面向于跨区通勤人员&#xff0c;旨在为管理员和用户提供一个跨区通勤人员健康管理系统。用户可以通过系统及时查看体检预约等。 跨区通勤人员健康管…

鸿蒙开发-UI-组件导航-Tabs

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 文章目录 一、基本概念 二、导航 1.底部导航 2.顶部导航 3.侧边导航 4.导航栏限制滑动 三、导航栏 1.固定导航栏 2.滚动导航栏 3…

Dockerfile文件参数配置和使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

仓储传感器坐标映射(SCL语言FOR循环指令应用)

这里的算法和找出矩阵中的最大数所在行号和列号基本一致&#xff0c;相关文章链接如下&#xff1a; https://rxxw-control.blog.csdn.net/article/details/135983593https://rxxw-control.blog.csdn.net/article/details/135983593仓储传感器计算其二维坐标对应位之后方便上位…

git小白进阶之路

git是最常用的版本控制工具&#xff0c;我对其进行了整理后续补充&#xff0c;这个文档欢迎大家来讨论&#xff0c;当前我的视频梳理&#xff1a; git小白进阶之路_哔哩哔哩_bilibili&#xff0c;非常希望大佬们能够批评指正&#xff0c;并多多交流。 目录 初始配置 配置账号…

python_蓝桥杯刷题记录_笔记_全AC代码_入门5

前言 关于入门地刷题到现在就结束了。 题单目录 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 2.P1426 小鱼会有危险吗 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 一开始写的代码是三重循环&#xff0c;结果提交上去一堆地TLE&#xff0c;然后我就给减少…