/**
*
* @param filePath 文件全路径
* @param ftpPath 上传到目的端目录
* @param username
* @param password
* @param host
* @param port
*/
public static void uploadFile(String filePath, String ftpPath, String username, String password, String host, Integer port) {
FileInputStream input = null;
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
//获取session 账号-ip-端口
com.jcraft.jsch.Session sshSession = jsch.getSession(username, host, port);
//添加密码
sshSession.setPassword(password);
Properties sshConfig = new Properties();
//严格主机密钥检查
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
//开启session连接
sshSession.connect();
//获取sftp通道
sftp = (ChannelSftp) sshSession.openChannel("sftp");
//开启
sftp.connect();
//文件乱码处理
/*Class<ChannelSftp> c = ChannelSftp.class;
Field f = c.getDeclaredField("server_version");
f.setAccessible(true);
f.set(sftp, 2);
sftp.setFilenameEncoding("GBK");*/
//判断目录是否存在
try {
Vector ls = sftp.ls(ftpPath); //ls()得到指定目录下的文件列表
/*if (ls == null) { //ls不会为null,哪怕它是一个空目录
sftp.mkdir(ftpPath);
}*/
} catch (SftpException e) {
sftp.mkdir(ftpPath);
}
sftp.cd(ftpPath);
String filename = filePath.substring(filePath.lastIndexOf(File.separator) + 1); //附件名字
//filename = new String(filename.getBytes("GBK"), StandardCharsets.ISO_8859_1);
input = new FileInputStream(new File(filePath));
sftp.put(input, filename);
//设定777权限,转为8进制放入chmod中
//sftp.chmod(Integer.parseInt("777", 8), ftpPath + filename);
input.close();
sftp.disconnect();
sshSession.disconnect();
System.out.println("================上传成功!==================");
} catch (Exception e) {
System.out.println("================上传失败!==================");
e.printStackTrace();
}
} /**
* @param directory SFTP服务器的文件路径
* @param downloadFile SFTP服务器上的文件名
* @param saveFile 保存到本地路径
* @param username
* @param password
* @param host
* @param port
*/
public static void downloadFile(String directory, String downloadFile, String saveFile, String username, String password, String host, Integer port) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
//获取session 账号-ip-端口
com.jcraft.jsch.Session sshSession = jsch.getSession(username, host, port);
//添加密码
sshSession.setPassword(password);
Properties sshConfig = new Properties();
//严格主机密钥检查
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
//开启session连接
sshSession.connect();
//获取sftp通道
sftp = (ChannelSftp) sshSession.openChannel("sftp");
//开启
sftp.connect();
if (directory != null && !"".equals(directory)) {
sftp.cd(directory);
}
FileOutputStream output = new FileOutputStream(new File(saveFile));
sftp.get(downloadFile, output);
output.close();
sftp.disconnect();
sshSession.disconnect();
System.out.println("================下载成功!==================");
} catch (SftpException | FileNotFoundException | JSchException e) {
log.error("文件下载异常!", e);
} catch (IOException e) {
e.printStackTrace();
}
}

获取文件所在绝对路径:

new ClassPathResource("").getURI().getPath()

ResourceUtils.getURL("classpath:").getPath()

java实现sftp文件上传下载的更多相关文章

  1. Java中实现文件上传下载的三种解决方案

    第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...

  2. java中的文件上传下载

    java中文件上传下载原理 学习内容 文件上传下载原理 底层代码实现文件上传下载 SmartUpload组件 Struts2实现文件上传下载 富文本编辑器文件上传下载 扩展及延伸 学习本门课程需要掌握 ...

  3. java+web+大文件上传下载

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

  4. java 通过sftp服务器上传下载删除文件

    最近做了一个sftp服务器文件下载的功能,mark一下: 首先是一个SftpClientUtil 类,封装了对sftp服务器文件上传.下载.删除的方法 import java.io.File; imp ...

  5. Java实现FTP与SFTP文件上传下载

    添加依赖Jsch-0.1.54.jar <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <dependency ...

  6. Jsch - java SFTP 文件上传下载

    使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...

  7. 我的代码库-Java8实现FTP与SFTP文件上传下载

    有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP ...

  8. Java FTPClient实现文件上传下载

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...

  9. java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题

    //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String ...

随机推荐

  1. Redis(一):基本数据类型与底层存储结构

    最近在整理有关redis的相关知识,对于redis的基本数据类型以及其底层的存储结构简要的进行汇总和备注(主要为面试用) Redis对外提供的基本数据类型主要为五类,分别是 STRING:可以存储字符 ...

  2. 【dubbo3.x trace组件分享】

    目录 背景 一.trace-dubbo组件介绍 二.设计原理 2.1 原理图 2.2 实现方案 2.2.1 consumer端实现 2.2.2 provider端实现 2.2.3 traceId和sp ...

  3. Net6Configuration & Options 源码分析 Part3 IOptionsMonitor 是如何接收到配置文件变更并同步数据源的

    配置源的同步 IOptionsMonitor 使用 //以下demo演示使用IOptionsMonitor重新加载配置并当重新加载配置是执行回调函数 var configuration = new C ...

  4. 移动IP通信过程

    看了点资料,沿着自己的思路来整理一下计算机网络部分移动IP通信遇到的问题以及是怎样解决的.如有错误,欢迎纠正! 遇到问题,然后解决问题. 沿着这样一个思路我们可以看看移动IP通信和传统的网络通信有什么 ...

  5. JavaWeb——Http

    4.1.什么是http http(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上. 文本:无链接 超文本:利用超链接将普通文本的信息组织在一起的超级文本 4.2.http两个时代的 ...

  6. 使用 Mosh 来优化 SSH 连接

    1.什么是Mosh Mosh表示移动Shell(Mobile Shell),是一个用于从客户端跨互联网连接远程服务器的命令行工具.它能用于SSH连接,但是比Secure Shell功能更多.它是一个类 ...

  7. STM32控制永磁同步电机 | FOC电机控制算法概述

    1. FOC基本概念 参考:https://www.sohu.com/a/432103720_120929980 FOC(field-oriented control)为磁场导向控制,又称为矢量控制( ...

  8. Springmvc入门基础(五) ---controller层注解及返回类型解说

    0.@Controller注解 作用:通过@Controller注解,注明该类为controller类,即控制器类,需要被spring扫描,然后注入到IOC容器中,作为Spring的Bean来管理,这 ...

  9. Java 中 IO 流分为几种?

    按功能来分:输入流(input).输出流(output).按类型来分:字节流和字符流.字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数 ...

  10. 两个对象值相同(x.equals(y) == true),但却可以有不同的hashcode?

    这个得看情况,如果该对象重写了equals方法,那么可能会出现equals相同,但hashcode不同的情况,但假如没有重写equals方法,那么它默认继承是Object的equals方法,根据源码可 ...