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. c# 进程间的通信实现之一简单字符串收发

       使用Windows API实现两个进程间(含窗体)的通信在Windows下的两个进程之间通信通常有多种实现方式,在.NET中,有如命名管道.消息队列.共享内存等实现方式,这篇文章要讲的是使用Wi ...

  2. unix&linux大学教程 目录

    第1章unix简介 第2章什么是linux?什么是unix 第3章unix连接 第4章开始使用unix 第5章gui:图形用户界面 第6章unix工作环境 第7章unix键盘使用 第8章能够立即使用的 ...

  3. css相对定位+浮动实现元素位置互换

    1.设置元素透明度 opacity:0.5; // w3c filter:alpha(opacity=50); //IE 2 position:relative; float:left; 一起使用的效 ...

  4. Nuget 常用命令

    Update-Package -ProjectName 'NLog' -Reinstall 主题 about_NuGet 简短说明 提供有关 NuGet 程序包管理器命令的信息. 详细说明 本主题介绍 ...

  5. Linux下创建新用户

    useradd -h查询使用方法 useradd -g sysadmin -d /home/devops -m -c "DevOps Installation User" -s / ...

  6. 一次Oracle 11g+FluentNHibernate AutoMapping组合尝试

    本文的上下文环境 操作系统:Win7 x64 Ultimate开发工具:Visual Studio 2013 一.前言 在以前开发的大多数场景下,使用的开发语言是C#,使用的数据库是Sql Serve ...

  7. Linux系统下如何查看已经登录用户

    查看用户的操作 系统管理员若想知道某一时刻用户的行为,只需要输入命令W 即可,在SHELL终端中输入如下命令: [ROOT@LOCALHOST ROOT] # W 2:31PM UP 11 DAY , ...

  8. IOS 本地通知推送消息

    在现在的移动设备中,好多应用性的APP都用到了推送服务,但是有好多推送的内容,比如有的只是单纯的进行推送一个闹钟类型的,起了提醒作 用,有的则是推送的实质性的内容,这就分为推送的内容来区别用什么推送, ...

  9. (Hibernate进阶)Hibernate映射——一对一双向关联映射(六)

    上一篇博客我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向: ...

  10. 为 Linux 应用程序编写 DLL[转]

    自:http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html 在仅仅只会编写插件的时候为什么要编写整个应用程序? 插件和 DLL 通常 ...