【Ftp客户端】FTPBox starter

news2024/11/15 8:48:38

  • 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 {
  
  @Autowired
  private 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: localhost
  port: 22
  username: root
  password: 1234
  • 连接池配置(可不配置使用默认值)
ftp:
  pool:
    min-idle: 1
    max-idle: 8
    max-active: 8
    max-wait: -1
    test-on-borrow: true
    test-on-return: false
    test-while-idle: true
    time-between-eviction-runs: 600000
    min-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.1
      port: 22
      username: lihw
      password: 1234
    rd-2:
      host: 127.0.0.2
      port: 22
      username: lihw
      password: 1234
  • 多 host ,密码 + 密钥登录方式

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

ftp:
  pool:
    min-idle-per-key: 1
    max-idle-per-key: 8
    max-active-per-key: 8
    max-active: 8
    max-wait: -1
    test-on-borrow: true
    test-on-return: false
    test-while-idle: true
    time-between-eviction-runs: 600000
    min-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.coloradmin.cn/o/1436366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】类与对象(四)——初始化列表|explicit关键字|static成员|友元|匿名对象

前言&#xff1a; 初始化列表&#xff0c;explicit关键字&#xff0c;static成员&#xff0c;友元&#xff0c;匿名对象 文章目录 一、构造函数的初始化列表1.1 构造函数体内赋值1.2 初始化列表 二、explicit关键字三、static成员四、友元4.1 友元函数4.2 友元类 五、内部类六、…

生成树技术华为ICT网络赛道

9.生成树 目录 9.生成树 9.1.生成树技术概述 9.2.STP的基本概念及工作原理 9.3.STP的基础配置 9.4.RSTP对STP的改进 9.5.生成树技术进阶 9.1.生成树技术概述 技术背景&#xff1a;二层交换机网络的冗余性与环路 典型问题1&#xff1a;广播风暴 典型问题2&#xff1a;MA…

OJ_单词个数统计

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<map> using namespace std;int main() {//如果输入带空格的字符串&#xff08;scanf不行&#xff09;&#xff1f;eg:This is An Pencil Case//1.fgets()//2.cin.getline();char arr[200]…

PCB经验规则的综合应用

PCB经验规则的综合应用 走线尽量短&#xff0c;长度小于信号波长的十分之一 二是无法短的&#xff0c;就控制它的阻抗 按传输线设计、控制阻抗 首先我们来看看电路板的参数。常见的1.6毫米电路板 1oz 铜箔&#xff0c;介质 FR4&#xff0c;介电常数4.6-4.8&#xff0c;板芯厚…

Redis核心技术与实战【学习笔记】 - 28.Redis 6.0新特性(多线程、客户端缓存与安全)

简述 Redis 6.0 新增了几个关键新特性&#xff0c;分别是面向网络处理的多 IO 线程、客户端缓存、细粒度的权限控制&#xff0c;以及 RESP 3 协议的使用。 其中&#xff0c;面向网络处理的多 IO 线程可以提高网络请求处理的速度&#xff0c;而客户端缓存可以让应用直接在客户…

唐嫣、刘诗诗、杨幂齐聚春晚舞台,再现仙剑三美惊艳绝伦的魅力。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近日&#xff0c;娱乐圈的目光将聚焦于三位璀璨的女星——唐嫣…

opensatck中windows虚拟机CPU核数显示异常问题处理

文章目录 一、问题描述二、元数据信息三、以32核的实例模版为例3.1 单槽位32核3.2 双槽位32核 总结 一、问题描述 openstack创建windows虚拟机的时候&#xff0c;使用普通的实例模版会出现CPU数量和实例模版不一致的问题。需要定制元数据才可以正常显示。 帖子&#xff1a;htt…

七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势

前言 自去年7月份我带队成立大模型项目团队以来&#xff0c;我司至今已有5个项目组&#xff0c;其中 第一个项目组的AIGC模特生成系统已经上线在七月官网第二项目组的论文审稿GPT则将在今年3 4月份对外上线发布第三项目组的RAG知识库问答第1版则在春节之前已就绪至于第四、第…

python下字符串操作

目录 一&#xff1a;连接字符串 二&#xff1a;字符串切片 三&#xff1a;字符串查找 四&#xff1a;字符串替换 五&#xff1a;字符串大小写转换 六&#xff1a;字符串分割 七&#xff1a;字符串去除空格和特殊字符 八&#xff1a;字符串长度 九&#xff1a;检查字符…

【RT-DETR有效改进】利用SENetV2重构化网络结构 (ILSVRC冠军得主,全网独家首发)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是SENetV2,其是2023.11月的最新机制(所以大家想要发论文的可以在上面下点功夫),其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而…

ORM模型类

模型 创建两个表 创建模型类 from django.db import models# Create your models here. class BookInfo(models.Model):name models.CharField(max_length10, uniqueTrue) # 书名pub_date models.DateField(nullTrue) # 发布时间read_count models.IntegerField(default…

uniCloud ---- schema2code

目录 schema2code有两种方式 label属性 component属性 group属性 应用 DB Schema里有大量的信息&#xff0c;其实有了这些信息&#xff0c;前端将无需自己开发表单维护界面&#xff0c;uniCloud可以自动生成新增、修改、列表、详情的前端页面&#xff0c;以及admin端的列…

最小生成树超详细介绍

目录 一.最小生成树的介绍 1.最小生成树的简介 2.最小生成树的应用 3.最小生成树的得出方法 二.Kruskal算法 1.基本思想&#xff1a; 2.步骤&#xff1a; 3.实现细节&#xff1a; 4.样例分析&#xff1a; 5.Kruskal算法代码实现&#xff1a; 三.Prim算法 1.基本思想…

如何更改默认浏览器?

打开设置---应用---默认应用 点击你想要设置为默认浏览器的应用&#xff08;假设为Microsoft Edge&#xff09;&#xff0c;点击设置默认值就可以了。

简单实践 spring clound 使用openfeign

1.概要 这是在前面工程基础上的一个变更。 前工程&#xff1a;检查实验 spring cloud nacos nacos-server-2.3.0-CSDN博客 2 代码 2.1 引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-open…

一般系统的请求认证授权思路【gateway网关+jwt+redis+请求头httpheader】

gateway&#xff1a;网关&#xff0c;我们都知道网关的作用就是对系统的所有请求&#xff0c;网关都会进行拦截&#xff0c;然后做一些操作&#xff08;例如&#xff1a;设置每个请求的请求头httpHeader&#xff0c;身份认证等等&#xff09;此时一般会使用到网关过滤器&#x…

【chromium】vs2022 中 clang构建

vs2022 “D:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\devenv.exe”看起来没装安装 clang 组件 vs2019 装的是12:报错了 Build started... 1>------ Build started: Project: ebBase, Configuration: Debug Win32 ------ 1>d:\Program Files…

【并发编程】手写线程池阻塞队列

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 示意图 步骤1&#xff1a;自定义任务队列 变量定义 用Deque双端队列来承接任务用ReentrantLock 来做锁并声明两个条件变量 Condition fullWai…

AE2023 After Effects 2023

After Effects 2023是一款非常强大的视频编辑软件&#xff0c;提供了许多新功能和改进&#xff0c;使得视频编辑和合成更加高效和灵活。以下是一些After Effects 2023的特色功能&#xff1a; 新合成预设列表&#xff1a;After Effects 2023彻底修改了预设列表&#xff0c;使其…

《权力的游戏》AI创作大电影 震撼来袭

《权力的游戏》AI创作大电影 震撼来袭 Westeros, a world of power, intrigue, and dark magic. In the frozen North, the army of the dead marches towards Winterfell. The Seven Kingdoms are divided by war and bloodshed, as the Great Houses battle for supremacy.…