使用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协议的缺陷
性能较差:SFTP协议使用加密技术传输数据,加密和解密过程会占用较多的CPU资源,影响文件传输的性能。
不支持断点续传:SFTP协议不支持文件断点续传,如果传输的文件较大或网络不稳定,传输失败后需要重新开始传输,耗费时间和流量。
可能存在兼容性问题:SFTP协议的实现方式存在差异,不同的SFTP服务器和客户端之间可能存在兼容性问题,导致传输失败或传输速度较慢。
所以是否使用,就看你的应用场景了