JSCH实现文件上传下载至sftp服务器
文件服务器采用FreeSSHd,文件服务器配置就不细说了。
直接上代码,该代码可以直接使用。
import com.jcraft.jsch.*; import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author fc
* @version V1.0
* @Title SFTPConnect
* @Package com.jsch
* @Descript :TODO()
* @date : 2018/8/30 下午3:50
*/
public class SftpConnect {
private String user;
private String password;
private String host;
private int port;
private ChannelSftp channelSftp;
private Session session;
private Logger logger = LoggerFactory.getLogger(SftpConnect.class);
private final String NO_SUCH_FILE = "No such file"; public SftpConnect(String user, String password, String host, int port) {
this.user = user;
this.password = password;
this.host = host;
this.port = port;
} private ChannelSftp connect(){
JSch jSch=new JSch();
try {
session=jSch.getSession(user,host,port);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
session.setPassword(password);
session.setConfig(sshConfig);
session.connect();
channelSftp= (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
} catch (JSchException e) {
return null;
}
return channelSftp;
} /**
* 断开连接
*/
private void disconnect() {
channelSftp.disconnect();
session.disconnect();
} public boolean upLoadFile(String path,String filename, InputStream is){
if(channelSftp == null){
logger.debug("初始化sftp连接:连接地址:{}",host);
connect();
logger.trace("sftp连接初始化完成:{}",host);
}
try {
validatePath(path);
channelSftp.put(is,filename);
disconnect();
} catch (SftpException e) {
logger.error("文件上传失败:\n{}",e);
return false;
}
return true;
} /**
* 验证服务器文件夹路径,如不存在则新建
* @param path
*/
private void validatePath(String path) throws SftpException {
try {
channelSftp.lstat(path);
channelSftp.cd(path);
} catch (SftpException e) {
if(NO_SUCH_FILE.equals(e.getMessage())){
logger.debug("{} 不存在,创建该路径",path);
String[] paths = path.split("/");
for(String p : paths){
try {
channelSftp.cd(p);
} catch (SftpException e1) {
channelSftp.mkdir(p);
channelSftp.cd(p);
}
}
}else {
throw e;
}
}
} /**
* 下载文件
* @param path
* @param filename
* @param: is
* @return
*/
public InputStream downFile(String path,String filename){
if(channelSftp == null){
logger.debug("初始化sftp连接:连接地址:{}",host);
connect();
logger.trace("sftp连接初始化完成:{}",host);
}
try {
channelSftp.cd(path);
InputStream is= channelSftp.get(filename);
disconnect();
return is;
} catch (SftpException e) {
return null;
}
}
}
JSCH实现文件上传下载至sftp服务器的更多相关文章
- Linux学习笔记(7)CRT实现windows与linux的文件上传下载
Linux学习笔记(7)CRT实现windows与linux的文件上传下载 按下Alt + p 进入SFTP模式,或者右击选项卡进入 命令介绍 help 显示该FTP提供所有的命令 lcd 改变本地上 ...
- xftp实现本地与服务器的文件上传下载(windows)
背景: Jemter环境搭建,需上传下载服务器文件到aws服务器上,由于secureCRT的局限性它只支持pub格式的密钥,不支持pem格式密钥,xshell是支持pem格式的,所以尝试安装xshel ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringMVC——返回JSON数据&&文件上传下载
--------------------------------------------返回JSON数据------------------------------------------------ ...
随机推荐
- java IO框架分析
jave.io框架 2010-11-10 22:18:34| 分类: 默认分类|举报|字号 订阅 可从IO的类层次,IO框架的设计模式来论述. 总体来说,IO可以分为字节流和字符流,不同在于 ...
- 【ZOJ 4062】Plants vs. Zombies
[链接] 我是链接,点我呀:) [题意] [题解] 二分最后的最大抵御值mid. 然后对于每个蘑菇. 都能算出来它要浇水几次mid/ai 然后如果第i个蘑菇没浇水达到要求次数. 就在i和i+1之间来回 ...
- mysql 服务器监控系列-黄杉 mysqldba
http://blog.csdn.net/mchdba/article/category/2220809
- Netty In Action中文版 - 第十五章:选择正确的线程模型
http://blog.csdn.net/abc_key/article/details/38419469 本章介绍 线程模型(thread-model) 事件循环(EventLoop) 并发(Con ...
- Running the app on your device
So far, you've run the app on the Simulator. That's nice and all but probably notwhy you're learning ...
- Configure environment variables for different tools in jenkins
安装以下的工具,并在Jenkins中的Manage Jenkins-->Configure System-->Global Properties-->Environment Vari ...
- 深入理解groupByKey、reduceByKey区别——本质就是一个local machine的reduce操作
下面来看看groupByKey和reduceByKey的区别: val conf = new SparkConf().setAppName("GroupAndReduce").se ...
- Python 字典(dict)操作(update)
1. get 注意以下两种形式的细微差别,差别在返回值的类型上: d.get(value, '') d.get(value, ['']) >> d = {} >> d.get( ...
- 杂项-JAVA:MVP
ylbtech-杂项-JAVA:MVP 简称:MVP 全称:Model-View-Presenter :MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Pres ...
- [CF1139 E] Maximize Mex 解题报告 (二分图匹配)
interlinkage: https://codeforces.com/contest/1139/problem/E description: 有$n$个学生,$m$个社团,每个学生有一个能力值,属 ...