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 ...
随机推荐
- Bar菜单
简介 BarButtonItem:元素(按钮.子菜单.标签.编辑器等) this.barButtonItem3 = new DevExpress.XtraBars.BarButtonItem(); B ...
- 使用composer管理php项目
composer global require "fxp/composer-asset-plugin:~1.1.1" composer create-project --prefe ...
- Python基础(二)之模块
模块:人们写好的一系列用于实现某种功能的代码封装起来,需要使用的时候直接调用即可. 模块分类:标准模块.第三方模块 标准模块:不需要安装,直接调用即可 第三方模块:需要安装后才可使用 注意:自己创建的 ...
- Linux 如何解决 xhost: unable to open display ""
[root@host02 ~]# vncservice You will require a password to access your desktops. Password: Verify: x ...
- Pycharm注册码(2016.2)
43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- 使用微软CORS包不能跨域访问的问题
使用jquery的ajax异步调用的时候会出现不能跨域访问的问题,这个问题一般有两种方法. 1:使用jsonp跨域 2:使用html5的CORS 在这里只谈论第二种,微软对CORS提供的了支持,在Nu ...
- 解决sublime text3 文件名,小框框的办法
解决sublime text3 文件名,小框框的办法 之前一直都是用的英文命名的文件夹,到前几天才发现,用中文,来命名文件夹出现了乱码问题. 今天晚上,自己也在网上去百度了很多方案,好像大部分都不太有 ...
- 我刚知道的WAP app中meta的属性
之前我一直做的都是WEB前端开发,来北京以后面试了一个移动前端开发,WAP前端开发. 其实在原来公司的时候也做过这方面的开发,可面试的时候面试官问我,要想强制让文档与设备的宽度保持1:1,mate标签 ...
- Spring集成Memcached三种方式(一)
转载:http://blog.csdn.net/u013725455/article/details/52102170 Memcached Client目前有3种: Memcached Client ...
- JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
这里是javascript中制作滚动代码的常用属性 页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见 ...