sftp上传 - 待完
1、搭建本地sftp
1.1、下载msftpsrvr.exe软件
下载地址:http://www.download3k.com/Install-Core-FTP-Mini-SFTP-Server.html

1.2、双击msftpsrvr.exe,录入sftp信息

2、工具类
SftpUploadUtil
package com.hundsun.channel.util; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException; public class SftpUploadUtil { public static final Log logger = LogFactory.getLog(SftpUploadUtil.class); /**
* 连接sftp服务器
* @param host 主机
* @param port 端口
* @param username 用户名
* @param password 密码
* @param privateKey 密钥文件路径
* @param passphrase 密钥口令
* @return
*/
public ChannelSftp connect(String host, int port, String username,String password,String privateKey,String passphrase) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
if (privateKey != null && !"".equals(privateKey)) {
//使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥
if (passphrase != null && !"".equals(passphrase)) {
jsch.addIdentity(privateKey, passphrase);
} else {
jsch.addIdentity(privateKey);
}
} Session sshSession = jsch.getSession(username, host, port);
System.out.println("Session created.");
if (password != null && !"".equals(password)) {
sshSession.setPassword(password);
}
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
//System.out.println("登录成功");
} catch (Exception e) {
System.out.println("------");
e.printStackTrace();
}
return sftp;
} /**
* 关闭
* @param sftp
* @param sshSession
* @throws JSchException
*/
public void close(ChannelSftp sftp) throws JSchException {
if (null!=sftp) {
if (null!=sftp.getSession()) {
sftp.getSession().disconnect();
}
sftp.disconnect();
} } /**
* 上传文件
* @param directory 上传的目录
* @param uploadFile 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file=new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
System.out.println("上传成功!");
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 下载文件
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
* @param sftp
*/
public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
logger.info("下载目录:" + directory + ",下载文件:" + downloadFile + ",存本地路径:" + saveFile);
sftp.cd(directory);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 删除文件
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 列出目录下的文件
* @param directory 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
return sftp.ls(directory);
} /**
* 创建文件夹
* @param sftp
* @param directory
* @throws SftpException
*/
public void createFolder(ChannelSftp sftp,String directory) throws SftpException { sftp.mkdir(directory);
} public static void main(String[] args) { /*
Vector<LsEntry> vector = new Vector<LsEntry>();
String host="192.168.54.112";
int port=22;
String username="wjs";
String password="wjs@567";
//上传的目录
String directory="/home/wjs/upload/1001/"+DateUtil.getDateTime("yyyyMMdd", new Date());
System.out.println("directory:--------------"+directory); //要上传的文件
String uploadFile="F:\\upload\\1001\\20151102\\info_1001_9000_20151102.txt"; SftpUploadUtil sf = new SftpUploadUtil(); //获取连接
ChannelSftp sftp = sf.connect(host, port, username, password); //创建文件夹
try {
//home/wjs/upload/1001
vector = sftp.ls(directory);
} catch (SftpException e) {
// TODO Auto-generated catch block
if (e.id == 2 || "No such file".equals(e.getMessage())) {
Iterator<LsEntry> it = vector.iterator();
while (it.hasNext()) {
LsEntry lsEntry = it.next();
System.out.println(lsEntry.getLongname());
System.out.println(lsEntry.getLongname().startsWith("d"));
}
try {
sftp.mkdir(directory);
//上传文件
sf.upload(directory, uploadFile, sftp);
File file = new File(uploadFile);
long fileSize = file.length(); sftp.put(directory + "/info_1001_9000_20151026.txt", new FileProgressMonitor(
fileSize), ChannelSftp.OVERWRITE);
sftp.quit();
sf.close(sftp);
} catch (SftpException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (JSchException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
}
*/}
}
3、测试连接
public static void main(String[] args) throws Exception {
SftpUploadUtil sfUtil = new SftpUploadUtil();
String sftpHost = "10.23.10.39";
int sftpPort = 22; // 端口表字段暂时未定义
String sftpUserName = "quanbs";
String password = "123456";
String privateKey = ""; // 秘钥文件路径
String passphrase = ""; // 秘钥口令
ChannelSftp sftp = sfUtil.connect(sftpHost, sftpPort, sftpUserName, password, privateKey, passphrase);
}
运行结果(连接成功):

4、测试sftp上传
public static void main(String[] args) throws Exception {
SftpUploadUtil sfUtil = new SftpUploadUtil();
String sftpHost = "10.23.10.39";
int sftpPort = 22; // 端口表字段暂时未定义
String sftpUserName = "quanbs";
String password = "123456";
String privateKey = ""; // 秘钥文件路径
String passphrase = ""; // 秘钥口令
ChannelSftp sftp = sfUtil.connect(sftpHost, sftpPort, sftpUserName, password, privateKey, passphrase);
// 测试sftp上传
testUploadFile(sfUtil, sftp);
}
/**
* 测试上传文件
* @param sfUtil
* @param sftp
* @throws SftpException
*/
public static void testUploadFile(SftpUploadUtil sfUtil, ChannelSftp sftp) throws SftpException{
String sftpDirectory = "E:"+File.separator+"sftp";
sftpDirectory = "\\";
String uploadFile = "D:\\log.zip";
List lsList = getLsListName(File.separator, sftp); // 获取目录下的文件名List
String date = DateUtils.convertDateToLong(new Date(), "yyyyMMdd").toString(); // 当天文件夹 20161026
if (!lsList.contains(date)) // 当天日期文件夹不存在则创建
sftp.mkdir(date); sftpDirectory += date; sfUtil.upload(sftpDirectory, uploadFile, sftp); }
/**
* 获取目录下的文件名List
* @param path 目录
* @param sftp
* @throws SftpException
*/
private static List<String> getLsListName(String path, ChannelSftp sftp) throws SftpException{
List<String> list = new ArrayList<String>();
Vector vector = sftp.ls(File.separator);
Iterator<LsEntry> it = vector.iterator();
while (it.hasNext()) {
LsEntry lsEntry = it.next();
list.add(lsEntry.getFilename());
}
return list;
}
运行结果:

附:
DateUtils
package com.hundsun.channel.util; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; public class DateUtils { public static SimpleDateFormat FORMAT_DATE = new SimpleDateFormat("yyyy-MM-dd"); public static SimpleDateFormat FORMAT_DATETIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static SimpleDateFormat FORMAT_DATE_SIMPLE = new SimpleDateFormat("yyyyMMdd"); public static SimpleDateFormat FORMAT_DATETIME_SIMPLE = new SimpleDateFormat("yyyyMMddHHmmss"); public static SimpleDateFormat FORMAT_DATE_CN = new SimpleDateFormat("yyyy��MM��dd��"); public static SimpleDateFormat FORMAT_DATETIME_CN = new SimpleDateFormat("yyyy��MM��dd��HHʱmm��ss��"); public static SimpleDateFormat FORMAT_DATETIME_HOUR = new SimpleDateFormat("yyyy-MM-dd HH:mm"); public static Date getDateTime(String dateStr, SimpleDateFormat format) {
Date date = null;
try {
date = format.parse(dateStr);
} catch (ParseException e) {
return null;
}
return date;
} public static String getDateTimeStr(Date date, SimpleDateFormat format) {
if (date == null || format == null) {
return null;
}
return format.format(date);
} public static Date getDate(String dateStr) {
if (dateStr == null || "".equals(dateStr)) {
return null;
}
return getDateTime(dateStr, FORMAT_DATE);
} public static Date getDateTime(String dateStr) {
return getDateTime(dateStr, FORMAT_DATETIME);
} public static String getDateStr(Date date) {
return getDateTimeStr(date, FORMAT_DATE);
} public static String getDateTimeStr(Date date) {
return getDateTimeStr(date, FORMAT_DATETIME);
} public static long getDiffDays(Date startTime, Date endTime) {
long quot = 0;
if (startTime == null || endTime == null) {
return quot;
}
SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");
try {
Date endDate = ft.parse(ft.format(endTime));
Date startDate = ft.parse(ft.format(startTime));
quot = endDate.getTime() - startDate.getTime();
quot = quot / 1000 / 60 / 60 / 24;
} catch (ParseException e) {
e.printStackTrace();
}
return quot;
} public static Long convertDateToLong(Date date, String format) {
SimpleDateFormat ft = new SimpleDateFormat(format);
String formatStr = ft.format(date);
long parseLong = Long.parseLong(formatStr);
return parseLong;
} public static Long convertDateToLong(Date date) {
String formatStr = FORMAT_DATETIME_SIMPLE.format(date);
long parseLong = Long.parseLong(formatStr);
return parseLong;
}
}
待完,很粗糙的东西 ,花了10分钟整理了下,要赶最后一班地铁回家了。 又是漫长的1个半小时。。。。
sftp上传 - 待完的更多相关文章
- python paramiko模拟ssh登录,实现sftp上传或者下载文件
Python Paramiko模块的安装与使用详解 paramiko是短链接,不是持续链接,只能执行你设定的shell命令,可以加分号执行两次命令. http://www.111cn.net/phpe ...
- THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议), 只要sshd服 ...
- Java SFTP 上传、下载等操作
Java SFTP 上传.下载等操作 实际开发中用到了 SFTP 用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch 写了个工具类记录下,便于日后使用. JSch是 SSH2 的纯Java ...
- SFTP 上传文件夹
使用sftp上传文件夹时若使用如下命令并不work: put /media/Research/GWAS_Class/* Desktop/ 此时,需要添加一个参数 -r, 另外在目标文件夹下面建立一个同 ...
- 使用SFTP上传文件到服务器的简单使用
最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...
- SFTP上传下载(C#)
sftp是ftp协议的升级版本,是牺牲上传速度为代价,换取安全性能,本人开始尝试使用Tamir.SharpSSH.dll但它对新版本的openssh 不支持,所有采用Ssh.Net方式 需要依赖:Re ...
- 利用nodejs监控文件变化并使用sftp上传到服务器
很久没写博客了,因为最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不 ...
- Java Sftp上传下载文件
需要使用jar包 jsch-0.1.50.jar sftp上传下载实现类 package com.bstek.transit.sftp; import java.io.File; import ja ...
- Xshell5下利用sftp上传下载传输文件
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...
随机推荐
- Spark算上下基线
def baseLine(sc: SparkContext): Unit = { println("--------------------baseLine start----------- ...
- 如何在Delphi里面查看程序的汇编代码?
开发工具:Delphi 10 Update2 1,在源代码中设置至少一个断点,目的让我们进入调试模式. 2,启动调试,当程序进入调试模式,停留在我们设定的断点处时候,使用快捷键"CTRL+A ...
- 分配和释放 BSTR 的内存
本文档已存档,并且将不进行维护. 分配和释放 BSTR 的内存 Visual Studio .NET 2003 转自: https://msdn.microsoft. ...
- windows 服务
一.创建一个Windows Service1)创建Windows Service项目 2)对Service重命名将Service1重命名为你服务名称,这里我们命名为ServiceTest. 二.创建服 ...
- 2016年Java服务器端开发面试总结
因为一些个人原因,陆陆续续参加了一些校招补招.社招的笔试和面试(BAT),也包括一些国外公司(Spotify, Google, Ericsson),最后有幸被网易收入麾下,拿到了S.下面罗列一些我复习 ...
- linux命令小常识
作为一个tester我们必须要会linux,也许你会说不用也可以.那么我想问,你部署测试环境在哪里,你下载war包并部署war包呢,你看日志在哪里? 基于测试需要用到liunx,我这里只针对需要用到的 ...
- CSS鼠标悬停图片加边框效果,不位移的方法
<!DOCTYPE HTML> <html lang="en-US"> <head> <title>css实现鼠标悬停时图片加边框效 ...
- 【多线程 5】线程池的类型以及submit()和execute()的区别
就跟题目说的一样,本篇博客,本宝宝主要介绍两个方面的内容,其一:线程池的类型及其应用场景:其二:submit和execute的区别.那么需要再次重申的是,对于概念性的东西,我一般都是从网上挑选截取,再 ...
- Linux cache释放
cache释放: To free pagecache: > /proc/sys/vm/drop_caches To free dentries and inodes: > /proc/sy ...
- Java中serialVersionUID
报错信息如下: Adds a default serial version ID to the selected type. Use this option to add a user-defined ...