public class SftpHelper {
private String ip;
private String port;
private String user;
private String pwd;
private ChannelSftp channelSftp;
public SftpHelper(String ip, String port, String user, String pwd) {
this.ip = ip;
this.port = port;
this.user = user;
this.pwd = pwd;
}
/**
* 下载sftp
* @param directory 下载完整路径
* @return
*/
public String sftpDownloadBase64(String directory){
ByteArrayOutputStream os = new ByteArrayOutputStream();
Sftp sftp = new Sftp(this.ip,Integer.parseInt(this.port),this.user,this.pwd);
this.channelSftp = sftp.getClient();
sftp.download(directory,os);
String base64 = cn.hutool.core.codec.Base64.encode(os.toByteArray());
return base64;
}
/**
* 上传sftp
* @param fileName 文件名
* @param dir 文件目录
* @param base64
*/
public void sftpUploadFile(String fileName,String dir,String base64){
ChannelSftp sftp = this.channelSftp;
Session session = null;
String ret = "";
try {
session = JschUtil.getSession(ip,Integer.parseInt(port),user,pwd);
Properties properties = new Properties();
properties.put("StrictHostKeyChecking", "no");
session.setConfig(properties);
if (!session.isConnected()){
session.connect();
}
if (sftp == null){
sftp = (ChannelSftp) session.openChannel("sftp");
sftp.connect();
}
// 如果不存在目标文件夹
if (!exist(sftp, dir)) {
mkdirs(sftp, dir);
}
sftp.put(base64ToInputStream(base64),fileName);
}catch (Exception e){
e.printStackTrace();
throw new ControllerException("sftp文件上传异常!");
}finally {
sftp.disconnect();
session.disconnect();
}
}
public static void main(String[] args) {
SftpHelper helper =new SftpHelper("192.168.16.1","22","user","111111");
//String ret = helper.sftpDownloadBase64("/test/gn.png");
String ret = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc4OEZDNDg0NEQ0QTExRThCNTU1OEUzNDVDMkIwMzY2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc4OEZDNDg1NEQ0QTExRThCNTU1OEUzNDVDMkIwMzY2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Nzg4RkM0ODI0RDRBMTFFOEI1NTU4RTM0NUMyQjAzNjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Nzg4RkM0ODM0RDRBMTFFOEI1NTU4RTM0NUMyQjAzNjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5aeLi5AAADo0lEQVR42hyTyW8bZQDF33zzzeIZ2+N4TeI4jYlDIhKaOi2loRyqmFJKxSqBxCKV9kbPSJwKSAik/gkcSgUHKKhIlCIoEgholIgGUoizQBanTlMncex4yXgbe2Y+rL7700/vJz1u+u8JEEbhr8RgGHXcX15TC3mrv2QEn6rY/a9aps1YbfErYmV/ZjDWKyZfMxmgERMEAMWDMJjYh2VV+3aKgx/czXWfcaq6fyiiwOWTcDc7fiy77cibldkbvHnnfcKRTe5BHeAvvBODbVu8Yaz0LswHL/4y8+a5AeeMcqbyLUbWJxFZn0aArcKMDCo71ltxqZFUPSSVNJlSIYRj/PEBD1TVji6sTFy5fuP8i2Peq9zZxmWEbjPUbAlWhod/VofmnsSetxcZ62zcbhYPSSz9e1W3S2Tq0x1uezqfuPHTayf+WwyRhPodfFMyGroIVmGw2/PsMkXwVxux5tcosSGSqZ+fEM1mopRvEBIb4o4c7Nm7aOVzjKd7CDhMYJNC1O22KQGcTEF1C2KOQrF15HerMI2KdXRMf6+nkztGO4PGaHi4GjngW8TswivISgGEn9zCfsiF8usaiM7A3CU4SRk52oPUiopTI0t871g9EkxLcdLZaT53P9XEw6E/UKt68UXyJWw+w8PqlCBN2uDnLLSGRWwkFFxbagN2negPJLGzYSLcZZ8mbk3s0fwCxmK3EfDfw48330DjMoHyZwasqKO106b/lkbxig83rz+LkD+DgyN34PFRuNx8mKys0i+J6sAj41mcPHoVBTOE5PoElvejWFsLILfVgZQexdR8AoVmF54+/Q0GDm+AOkUsr9Br1O81xyoZBqtt++Xxz7Cw+Dg+rHyM2r8EJ2K30OvdxA/Zk0i5BxEf/QcvPPEJtpZaoEyEv8M4RMtZbQaH7YkmJ4ZCkQIuXTiH7f04lvXjSBy5BZXsIryagUeoIdqThNLaQlPWIPE0l8sKM9xHz/fBHaydGoqzS9Rlj1KjDHnPRP8w0KIy6iUTPrfV/gnDvTpFwfAADSytzanv5vPC91R2FyWR8AfCPqY2ZIJcVoMhNvHXnImmDrg1GVknhd4Cmg4eoS7A0WzJG6Ld1xHgHNSjODhFYfVy2UorMrqdGlMaDrFN4eHTahAoQ1GgYJRAkwCBoFEu0rQm21WRtMB9/nZ3Wx+jjIPH5UdUkIXHvB7+0Vq19pBllKK2zQgve9JOl7pW2GPzjZox2yghJQh8kSO8+b8AAwDYPqUwVKetEAAAAABJRU5ErkJggg==";
System.out.println(ret);
helper.sftpUploadFile("1.png","/2023/02/",ret);
}
public String downloadFileToBase64(String filePath){
ChannelSftp sftp = null;
Session session = null;
String ret = "";
try {
session = JschUtil.getSession(ip,Integer.parseInt(port),user,pwd);
Properties properties = new Properties();
properties.put("StrictHostKeyChecking", "no");
session.setConfig(properties);
session.connect();
sftp = (ChannelSftp) session.openChannel("sftp");
sftp.connect();
InputStream io = sftp.get(filePath);
ret = inputStream2Base64(io);
io.close();
}catch (Exception e){
e.printStackTrace();
throw new ControllerException("sftp文件下载异常!");
}finally {
sftp.disconnect();
session.disconnect();
}
return ret;
}
public void uploadFile(String filePath,String base64){
ChannelSftp sftp = null;
Session session = null;
String ret = "";
try {
session = JschUtil.getSession(ip,Integer.parseInt(port),user,pwd);
Properties properties = new Properties();
properties.put("StrictHostKeyChecking", "no");
session.setConfig(properties);
session.connect();
sftp = (ChannelSftp) session.openChannel("sftp");
sftp.connect();
sftp.put(base64,filePath);
}catch (Exception e){
e.printStackTrace();
throw new ControllerException("sftp文件下载异常!");
}finally {
sftp.disconnect();
session.disconnect();
}
}
/**
* 判断文件夹是否存在
*
* @param channelSftp
* @param dir
* @return
*/
protected boolean exist(ChannelSftp channelSftp, String dir) {
try {
channelSftp.lstat(dir);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 创建文件夹
*
* @param channelSftp
* @param dir
* @return
*/
protected boolean mkdirs(ChannelSftp channelSftp, String dir) {
try {
String pwd = channelSftp.pwd();
if (StringUtils.contains(pwd, dir)) {
return true;
}
String relativePath = StringUtils.substringAfter(dir, pwd);
String[] dirs = StringUtils.splitByWholeSeparatorPreserveAllTokens(relativePath, "/");
for (String path : dirs) {
if (StringUtils.isBlank(path)) {
continue;
}
try {
channelSftp.cd(path);
} catch (SftpException e) {
channelSftp.mkdir(path);
channelSftp.cd(path);
}
}
return true;
} catch (Exception e) {
return false;
}
}
private static String inputStream2Base64(InputStream is) throws Exception {
byte[] data = null;
try {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = is.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
throw new Exception("输入流关闭异常");
}
}
}
return Base64.getEncoder().encodeToString(data);
}
private static InputStream base64ToInputStream(String base64string) {
ByteArrayInputStream stream = null;
try {
BASE64Decoder decoder = new BASE64Decoder();
byte[] bt = decoder.decodeBuffer(base64string);
stream = new ByteArrayInputStream(bt);
} catch (Exception e) {
e.printStackTrace();
}
return stream;
}
}
sftp工具类
最新推荐文章于 2025-06-18 09:25:27 发布