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上传 - 待完的更多相关文章

  1. python paramiko模拟ssh登录,实现sftp上传或者下载文件

    Python Paramiko模块的安装与使用详解 paramiko是短链接,不是持续链接,只能执行你设定的shell命令,可以加分号执行两次命令. http://www.111cn.net/phpe ...

  2. THINKPHP 3.2 PHP SFTP上传下载 代码实现方法

     一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议),  只要sshd服 ...

  3. Java SFTP 上传、下载等操作

    Java SFTP 上传.下载等操作 实际开发中用到了 SFTP 用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch 写了个工具类记录下,便于日后使用. JSch是 SSH2 的纯Java ...

  4. SFTP 上传文件夹

    使用sftp上传文件夹时若使用如下命令并不work: put /media/Research/GWAS_Class/* Desktop/ 此时,需要添加一个参数 -r, 另外在目标文件夹下面建立一个同 ...

  5. 使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...

  6. SFTP上传下载(C#)

    sftp是ftp协议的升级版本,是牺牲上传速度为代价,换取安全性能,本人开始尝试使用Tamir.SharpSSH.dll但它对新版本的openssh 不支持,所有采用Ssh.Net方式 需要依赖:Re ...

  7. 利用nodejs监控文件变化并使用sftp上传到服务器

    很久没写博客了,因为最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不 ...

  8. Java Sftp上传下载文件

    需要使用jar包  jsch-0.1.50.jar sftp上传下载实现类 package com.bstek.transit.sftp; import java.io.File; import ja ...

  9. Xshell5下利用sftp上传下载传输文件

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...

随机推荐

  1. Webview获取H5页面js方法参数

    #import<JavaScriptCore/JavaScriptCore.h> #pragma mark UIWebViewDelegate - (void)webViewDidFini ...

  2. EF6.0批量插入

    EF6.0批量插入有多种方式,可以使用EntityFramework.Extensions,提供的有BulkInsert. /// <summary> /// 批量插入 /// </ ...

  3. MVC部分视图含义

    Partail Views 类似于ASPX视图引擎中的用户控件,使用部分视图可以创建放置于不同页面的通用部分.

  4. java @Autowired与@Resource的区别

    @Autowired与@Resource的区别     1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认 ...

  5. 剑指Offer:解决难题时的三大方法

    1.画图 让抽象的东西变得直观生动起来.比如设计二叉树,链表,栈,队列这些数据结构时. 2.举例子 同样可以化抽象为直观.能够更清晰的展现思路.从例子归纳出一般做法. 3.分解 有时问题本身是比较复杂 ...

  6. 十二、shapes

    1. The control points are attributes on the shape which are usually arrays of points. Control points ...

  7. 通过Windows组策略限制证书组织流氓软件的安装运行

    https://liwei2.com/2015/11/27/378.html关于如何提取证书,请参阅:https://www.zhihu.com/question/26917038http://www ...

  8. js解决IE不支持数组的indexOf()方法

    if (!Array.indexOf) {                                    Array.indexOf = function (obj) {            ...

  9. Servlet中转发和重定向的区别

    Servlet中页面的跳转有两种方式:转发和重定向. 1.转发和重定向的区别 ①转发是服务器行为,重定向是客户端行为. ②转发是浏览器发生了一次请求,重定向至少是两次请求. ③转发地址栏中的url不会 ...

  10. Android开发--页面切换

    1.创建android项目.项目文档如下 2.activity_main布局,Androidv4包里自带的,既然是自带的那么直接拿来用就可以了,当然前提是你得工程里有v4包 <LinearLay ...