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数据------------------------------------------------ ...
随机推荐
- Web Service 附件技术的发展及演变
Web Service 通常将业务数据封装在 SOAP 主体或者 SOAP 消息附件中进行传输,这些附件往往采用 Base64 编码二进制方式进行封装,这将大大增加待传输的数据量,消耗比较长的编码时间 ...
- Java 中 synchronized的用法详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之 ...
- 纪录:Solr6.4.2+Flume1.7.0 +morphline+kafka集成
当前大多数企业版hadoop的solr版本都还停留在solr4.x,由于这个版本的solr本身的bug较多,使用起来会出很多奇怪的问题.如部分更新日期字段失败的问题. 最新的solr版本不仅修复了以前 ...
- asp.net常用容器
autofac就是ioc的第三方的IOC容器 unity也是IOC容器 掌握这两个容器就可以了,非常简单
- 介绍C++ STL常用模板使用方法的相关资料
1.vector的几种初始化及赋值方式
- [hdu 3264] Open-air shopping malls(二分+两圆相交面积)
题目大意是:先给你一些圆,你可以任选这些圆中的一个圆点作圆,这个圆的要求是:你画完以后.这个圆要可以覆盖之前给出的每一个圆一半以上的面积,即覆盖1/2以上每一个圆的面积. 比如例子数据,选左边还是选右 ...
- 125条常见的java面试、笔试题大汇总
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解所有问题,而仅仅是选择当中的一部分,临时不用部分细节.抽象包含两个方面,一是过程抽象. ...
- JSON以及Java转换JSON的方法(前后端经常使用处理方法)
本文主要讲述例如以下几个内容: 1.JSON定义以及JSON的特性 2.怎样在JavaScript中解释JSON格式数据 3.怎样在Java代码中使用JSON(讲对象转换成JSON对象以及解释JSON ...
- 【cocos2d-x 3.7 飞机大战】 决战南海I (十二) 游戏结束场景
游戏结束的时候,要显示分数.还要可以选择是返回主场景还是退出游戏 // 退出游戏 void menuCloseCallback(cocos2d::Ref* pSender); // 返回主界面 voi ...
- vim设置solarized配色
最近在学习使用VIM.我选择Solarized配色.相信很多人也都在用. 官网地址: http://ethanschoonover.com/solarized 看这配色:八卦乾坤,赏心悦目,高端大气上 ...