使用开源项目(hutool)建立ftp和sftp连接对象同时进行相应的上传下载

2 篇文章 0 订阅
1 篇文章 0 订阅
  • 项目中需要对半结构化数据源(ftp,sftp,hdfs等)根据从数据库读取的配置信息进行创建相应的连接对象。可以使用hutool项目中extra包下面的ftp包和ssh包。这两个包囊括的相应方法基本上能够满足基本需求,当然如果满足不了,可以给作者提或者可以在dev5分支上贡献自己的代码。

  • hutool项目封装了很多的实用的方法,比如还有二维码、图片验证码,excel的相关操作,加解密等各种工具类,在日常的工作中使用它真的可以事半功倍。

  • FtpTemplate

import cn.hutool.extra.ftp.Ftp;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
 * ftp 连接对象
 *
 * @author niulibing
 */
@Data
@AllArgsConstructor
public class FtpTemplate implements Serializable {

    /**
     * ftp客户端
     */
    private Ftp ftpClient;
}
  • SshTemplate
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.Session;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
 * sftp template
 *
 * @author niulibing
 * @date 2020-06-29
 */

@Data
@AllArgsConstructor
public class SshTemplate implements Serializable {
    /**
     * sftp客户端
     */
    private ChannelSftp sftp;

    private Session session;


    public SshTemplate() {
    }

    /**
     * 构造sftp
     *
     * @param sftp sftp
     */
    public SshTemplate(ChannelSftp sftp) {
        this.sftp = sftp;
    }

    /**
     * 构造session
     *
     * @param session session
     */
    public SshTemplate(Session session) {
        this.session = session;
    }
}

  • SemiStructuredDataSourceImpl
import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ssh.JschUtil;
import com.jcraft.jsch.Session;
import com.kun.framework.crypto.cipher.DesCipher;
import com.kun.res.base.ResBaseInfo;
import com.kun.res.service.context.datasource.SemiStructuredDataSourceService;
import com.kun.res.template.FtpTemplate;
import com.kun.res.template.SshTemplate;
import com.kun.res.utils.DataSourceUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

/**
 * 半结构化数据源实现类
 *
 * @author niulibing
 * @date 2020-06-29
 */
@Service
@Slf4j
public class SemiStructuredDataSourceImpl implements SemiStructuredDataSourceService {


	/**
	 * 数据源工具类
	 */
	@Autowired
	private DataSourceUtil dataSourceUtil;
	/**
	 * FTP
	 */
	@Autowired
	private Ftp ftp;

	/**
	 * 获取ftp连接对象
	 *
	 * @param instanceId 数据源实例id
	 * @return FtpTemplate
	 */
	@Override
	public FtpTemplate getFtpTemplate(String instanceId) throws NoSuchPaddingException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException {

		ResBaseInfo baseInfo = dataSourceUtil.encapsulationParameters(instanceId);
		//获取连接
		return new FtpTemplate(ftp.init(baseInfo.getHost(), Integer.parseInt(baseInfo.getPort()), baseInfo.getUserName(), DesCipher.decrypt(baseInfo.getUserPwd())));
	}

	/**
	 * 获取sftp连接对象
	 *
	 * @param instanceId 数据源实例id
	 * @return SftpTemplate
	 */
	@Override
	public SshTemplate getSftpTemplate(String instanceId) throws NoSuchPaddingException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException {

		ResBaseInfo baseInfo = dataSourceUtil.encapsulationParameters(instanceId);
		Session session = JschUtil.getSession(baseInfo.getHost(), Integer.parseInt(baseInfo.getPort()), baseInfo.getUserName(), DesCipher.decrypt(baseInfo.getUserPwd()));
		return new SshTemplate(JschUtil.openSftp(session, 5000), session);
	}

其实真正获取ftp和sftp对象的就一句代码,开发确实是方便了很多。具体的上传下载通过获取ftp和sftp对象调用即可。

Ftp ft = ftp.init(baseInfo.getHost(), Integer.parseInt(baseInfo.getPort()), baseInfo.getUserName(), DesCipher.decrypt(baseInfo.getUserPwd()));
Session session = JschUtil.getSession(baseInfo.getHost(), Integer.parseInt(baseInfo.getPort()), baseInfo.getUserName(), DesCipher.decrypt(baseInfo.getUserPwd()));

ChannelSftp sftp = JschUtil.openSftp(session, 5000);

开源项目hutool github地址:
https://github.com/looly/hutool
文档地址:
https://www.hutool.cn/docs/#/

Java使用Hutool SFTP可以实现与远程服务器进行文件传输的功能。Hutool是一个Java工具库,提供了丰富的功能类库,其中包括了对SFTP操作的支持。 在使用Hutool SFTP时,首先需要导入相关的依赖。可以将以下依赖添加到项目的pom.xml文件中: ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.10</version> </dependency> ``` 接下来,需要创建一个Sftp类的实例对象,并通过`setHost`、`setPort`、`setUser`和`setPass`方法设置连接远程服务器所需的主机名、端口、用户名和密码。然后,使用`connect`方法建立与服务器的连接建立连接后,就可以使用Hutool SFTP提供的方法进行文件传输了。例如,可以使用`upload`方法将本地文件上传到远程服务器,方法签名如下: ```java public void upload(String src, String dest) ``` 其中,`src`参数表示本地文件的路径,`dest`参数表示远程服务器上保存文件的路径。 另外,还可以使用`download`方法从远程服务器下载文件到本地。方法签名如下: ```java public void download(String src, String dest) ``` 其中,`src`参数表示远程服务器上文件的路径,`dest`参数表示下载文件保存的本地路径。 除了上传和下载文件,Hutool SFTP还支持其他一些操作,如创建目录、修改文件权限等。 使用Hutool SFTP进行文件传输时,还需要注意及时关闭连接,以释放资源。可以使用`close`方法关闭与服务器的连接。 总之,Hutool SFTP提供了简单方便的API,可以轻松地实现Java与远程服务器之间的文件传输功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值