SpringBoot怎么集成SFTP客户端实现文件上传下载(sftp,springboot,开发技术)

时间:2024-05-01 22:03:56 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    SpringBoot%E6%80%8E%E4%B9%88%E9%9B%86%E6%88%90SFTP%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%AE%9E%E7%8E%B0%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD

在项目开发中,一般文件存储很少再使用SFTP服务,但是也不排除合作伙伴使用SFTP来存储项目中的文件或者通过SFTP来实现文件数据的交互。

我遇到的项目中,就有银行和保险公司等合作伙伴通过SFTP服务来实现与我们项目的文件数据的交互。

为了能够顺利地完成与友商的SFTP服务的连通,我们需要在自己的项目中实现一套SFTP客户端工具。一般我们会采用Jsch来实现SFTP客户端。

首先我们一定要引入jsch依赖,这个是我们实现SFTP客户端的基石;其次我们引入了链接池工具,为了避免每次执行SFTP命令都要重新创建链接,我们使用池化的方式优化了比较消耗资源的创建操作。

为了更好的使用SFTP工具,我们把jsch中关于SFTP的相关功能提炼出来,做了一次简单的封装,做成了我们可以直接使用的工具类。

里面只有两类方法:

1.创建Session与开启Session;

session创建好后,还不能创建channel,需要开启session后才能创建channel;

2.创建channel与开启channel;

channel也是一样,创建好的channel需要开启后才能真正地执行命令;

我们通过实现BasePooledObjectFactory类来池化通道ChannelSftp。这并不是真正池化的代码,下面的代码只是告知池化管理器如何创建对象和销毁对象。

为了实现真正的池化操作,我们还需要以下代码:

1.我们需要在SftpClient对象中创建一个GenericObjectPool对象池,这个才是真正的池子,它负责创建和存储所有的对象。

2.我们还需要提供资源销毁的功能,也就是实现AutoCloseable,在服务停止时,需要把相关的资源销毁。

我们已经对链接池进行了初始化,下面我们就可以从链接池中获取我们需要的ChannelSftp来实现文件的上传下载了。

下面实现了多种文件上传和下载的方式:

1.直接把本地文件上传到SFTP服务器的指定路径;

2.把InputStream输入流提交到SFTP服务器指定路径中;

3.可以针对以上两种上传方式进行进度的监测;

4.把SFTP服务器中的指定文件下载到本地机器上;

5.把SFTP服务器˙中的文件写入指定的输出流;

6.针对以上两种下载方式,监测下载进度;

我们可以通过java config的方式,把我们已经实现好的SftpClient类实例化到Spring IOC容器中来管理,以便让开发人员在整个项目中通过@Autowired的方式就可以直接使用。

通过以上代码,我们就可以在项目的任何地方直接使用SFTP客户端来上传和下载文件了。

本文:SpringBoot怎么集成SFTP客户端实现文件上传下载的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Springboot集成Tile客户端之Set命令如何实现下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18