Java使用sftp协议上传、下载文件

使用sftp文件上传、下载文件其实存在的一些局限性,这个文章最后再说

现在直接上源码

首先引入依赖

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.54</version>
        </dependency>

上传文件的核心代码

      try{
            String host = "ip";
            String username = "name";
            String password = "password";
            String remoteDirectory = /www/server;
            String remoteFilename = "test.tar";
            String localFilename ="D:/test.tar";
            JSch jsch = new JSch();
            Session session = jsch.getSession(username, host, 22);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();
            ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
            sftpChannel.connect();
            sftpChannel.cd(remoteDirectory);
            sftpChannel.put(new FileInputStream(new File(localFilename)), remoteFilename);
            sftpChannel.disconnect();
            session.disconnect();
            return AjaxResult.success();
        }catch (SftpException | IOException| JSchException e) {
            throw new RuntimeException(e);
        }

下载文件的核心代码

  public static void main(String[] args) throws JSchException, IOException, SftpException {
           String host = "ip";
            String username = "name";
            String password = "password";
            String remoteFile = "/root/test.tar";
            String localFile = "E:\\Download/1.tar";

            JSch jsch = new JSch();
            Session session = jsch.getSession(username, host, 22);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
            sftpChannel.connect();

            InputStream inputStream = sftpChannel.get(remoteFile);

            OutputStream outputStream = new FileOutputStream(localFile);
            byte[] buffer = new byte[1024];
            int bytesRead = -1;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            outputStream.close();
            inputStream.close();
            sftpChannel.disconnect();
            session.disconnect();
  }

下载文件时候,需要保证本地有同类型文件

因为SFTP本质上是通过网络传输文件

使用SFTP下载文件其实就是,使用get命令将远程文件复制到本地文件系统。与常规复制不同,SFTP会将远程文件的内容通过网络传输到本地系统,然后保存到本地文件系统中。

有点类似于复制,把远程文件复制到本地文件,这里显示就是把test.tar文件,复制给了1.tar,所以在下载文件时候,本地要有同类型文件,用来储存

最后就是SFTP协议的缺陷

  1. 性能较差:SFTP协议使用加密技术传输数据,加密和解密过程会占用较多的CPU资源,影响文件传输的性能。

  1. 不支持断点续传:SFTP协议不支持文件断点续传,如果传输的文件较大或网络不稳定,传输失败后需要重新开始传输,耗费时间和流量。

  1. 可能存在兼容性问题:SFTP协议的实现方式存在差异,不同的SFTP服务器和客户端之间可能存在兼容性问题,导致传输失败或传输速度较慢。

所以是否使用,就看你的应用场景了

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值