文件服务器采用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服务器的更多相关文章

  1. Linux学习笔记(7)CRT实现windows与linux的文件上传下载

    Linux学习笔记(7)CRT实现windows与linux的文件上传下载 按下Alt + p 进入SFTP模式,或者右击选项卡进入 命令介绍 help 显示该FTP提供所有的命令 lcd 改变本地上 ...

  2. xftp实现本地与服务器的文件上传下载(windows)

    背景: Jemter环境搭建,需上传下载服务器文件到aws服务器上,由于secureCRT的局限性它只支持pub格式的密钥,不支持pem格式密钥,xshell是支持pem格式的,所以尝试安装xshel ...

  3. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  4. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  5. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  6. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  7. 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...

  8. ssh框架文件上传下载

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. SpringMVC——返回JSON数据&&文件上传下载

    --------------------------------------------返回JSON数据------------------------------------------------ ...

随机推荐

  1. 【hihocoder 1329】平衡树·Splay(Splay做法)

    [题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 插入操作:-,记住每次插入之后都要把它放到根节点去就好; 询问操作:对于询问 ...

  2. C# SortedDictionary&lt;TKey, TValue&gt; 类

    表示依据键进行排序的键/值对的集合. https://msdn.microsoft.com/zh-cn/library/f7fta44c.aspx

  3. iOS开发——远程消息推送的实现

    在我们使用App的过程中.总是会收到非常多的消息推送.今天我们就要来实现这个功能.首先消息推送分为本地消息推送和远程消息推送.而当中又以远程消息最为经常使用. 可是在推送远程消息之前.有两个前提条件. ...

  4. matlab7安装后的常见问题

    1.有时候.打开MatLab7时,会弹出"找不到指定的模块"对话框,如图(1)所看到的: 图(1) 找不到指定模块 产生这个问题的解决办法是.你的BLAS_VERSION环境变量没 ...

  5. 基于ActiveMQ的消息中间件系统逻辑与物理架构设计具体解释

    1. 基本介绍与组件架构图 维基百科对消息中间件的定义是"Message-oriented Middleware is software infrastructure focused on ...

  6. JavaScript中bind、call、apply函数使用方法具体解释

    在给我们项目组的其它程序介绍 js 的时候,我准备了非常多的内容,但看起来效果不大,果然光讲还是不行的,必须动手. 前几天有人问我关于代码里 call() 函数的使用方法.我让他去看书,这里推荐用js ...

  7. 编程算法 - 数组中的逆序对 代码(C)

    数组中的逆序对 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 在数组中的两个数字假设前面一个数字大于后面的数字, 则这两个数字组成一个逆序对. ...

  8. c26---文件包含include

    // // main.c // 文件包含 #include <stdio.h> // 函数可以重复声明, 但不能重复定义 void test(); void test(); void te ...

  9. php---依赖倒转(反转控制)原则

    一.简介 依赖注入和控制反转说的实际上是同一个东西,它们是一种设计模式,这种设计模式用来减少程序间的耦合 优点:使用依赖注入,最重要的一点好处就是有效的分离了对象和它所需要的外部资源,使得它们松散耦合 ...

  10. C++中值传递(pass-by-value)和引用传递(pass-by-reference)

    1.pass-by-value的情况: 缺省情况C++以pass-by-value(继承C的方式)传递对象至(或来自)函数.函数参数都是以实际参数的复件为初值,调用端所获得的也是函数返回值的一个复件, ...