sftp文件上传和下载

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

下面是java 代码sftp文件上传和下载具体实现

1.连接服务器类

package Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

/*
* @author lixiongjun
*
* 利用JSch包实现创建ChannelSftp通信对象的工具类
* 2015-1-27 上午10:03:21
*/

public class SftpUtil {

private static String ip = null; // ip 主机IP
private static int port = -1; // port 主机ssh2登陆端口,如果取默认值,传-1
private static String user = null; // user 主机登陆用户名
private static String psw = null; // psw 主机登陆密码
private static String servicePath = null; // 服务存储文件路径
private static Properties prop = null;

private static Session session = null;
private static Channel channel = null;

// 读取配置文件的参数
static {
prop = new Properties();
ClassLoader cl = SftpUtil.class.getClassLoader();
InputStream is = cl
.getResourceAsStream("Test/Sftp_UpDownload.properties");
try {
prop.load(is);
} catch (IOException e) {
// System.out.println("读取配置文件出错!");
e.printStackTrace();
}
ip = prop.getProperty("ip");
port = Integer.parseInt(prop.getProperty("port"));
user = prop.getProperty("user");
psw = prop.getProperty("psw");
servicePath = prop.getProperty("servicePath");

}

/**
* 获取 sftp通信
*
* @return 获取到的ChannelSftp
* @throws Exception
*/

public static ChannelSftp getSftp() throws Exception {

ChannelSftp sftp = null;
JSch jsch = new JSch();
if (port <= 0) {
// 连接服务器,采用默认端口
session = jsch.getSession(user, ip);
} else {
// 采用指定的端口连接服务器
session = jsch.getSession(user, ip, port);
}
// 如果服务器连接不上,则抛出异常
if (session == null) {
throw new Exception("session is null");
}
// 设置登陆主机的密码
session.setPassword(psw);// 设置密码
// 设置第一次登陆的时候提示,可选值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
// 设置登陆超时时间
session.connect(30000);
try {
// 创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
// 进入服务器指定的文件夹
sftp.cd(servicePath);

} catch (Exception e) {
e.printStackTrace();
}
return sftp;
}

/**
* 关闭连接
*/
public static void closeSftp() {
if (channel != null) {
if (channel.isConnected())
channel.disconnect();
}
if (session != null) {
if (session.isConnected())
session.disconnect();
}
}
}

2.上传下载工具类

package Test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

import org.junit.Test;

import com.jcraft.jsch.ChannelSftp;

public class SftpUploadOrDownload {

/*
* @author lixiongjun
*
* 实现sftp文件上传下载的工具类
* 2015-1-27 下午15:13:26
*/

/**
* 上传本地文件到服务器
* @param srcPath 本地文件路径
* @param dstFilename 目标文件名
* @return 是否上传成功
*/
public boolean upload(String srcPath,String dstFilename){
ChannelSftp sftp=null;
try {
sftp =SftpUtil.getSftp();
sftp.put(srcPath,dstFilename);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
finally{
SftpUtil.closeSftp();
}
}

/**
* 上传本地文件到服务器
* @param in 输入流
* @param dstFilename 目标文件名
* @return 是否上传成功
*/
public boolean uploadBystrem(InputStream in,String dstFilename){
ChannelSftp sftp=null;
try {
sftp =SftpUtil.getSftp();
sftp.put(in,dstFilename);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
finally{
SftpUtil.closeSftp();
}
}

/**
* 把服务器文件下载到本地
* @param desPath 下载到本地的目标路径
* @param srcFilename 源文件名
* @return 是否下载成功
*/
public boolean download(String srcFilename,String dstPath){
ChannelSftp sftp=null;
try {
sftp =SftpUtil.getSftp();
sftp.get(srcFilename,dstPath);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
finally{
SftpUtil.closeSftp();
}
}

/**
* 获取服务器文件的内容,只对文本文件有效
* @param srcFilename 服务器所在源文件名
* @return 文件内容
*/
public String getServiceFileContext(String srcFilename){
ChannelSftp sftp=null;
InputStream in=null;
BufferedReader br=null;
String filecontext="";
try {
sftp =SftpUtil.getSftp();
in=sftp.get(srcFilename);
br=new BufferedReader(new InputStreamReader(in));
String str=br.readLine();
while(str!=null){
filecontext+=str+"\n";
str=br.readLine();
}

} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
br.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
SftpUtil.closeSftp();
}
return filecontext;
}

/**
* 删除服务器上文件
* @param filename 要删除的文件名
* @return 是否删除成功
*/
public boolean remove(String filename){
ChannelSftp sftp=null;
try {
sftp =SftpUtil.getSftp();
sftp.rm(filename);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
finally{
SftpUtil.closeSftp();
}
}

@Test
public void TestSftpUpload(){
if(upload("E:/test.txt","test.txt")){
System.out.println("上传文件成功");
}
else{
System.out.println("上传文件失败");
}
}

@Test
public void TestSftpDownload(){
if(download("test.txt","E:/downtest.txt")){
System.out.println("下载文件成功");
}
else{
System.out.println("下载文件失败");
}
}

@Test
public void TestSftpgetServiceFileContext(){

String context=getServiceFileContext("test.txt");
System.out.println(context);

}

@Test
public void TestSftpRemove(){
if(remove("test.txt")){
System.out.println("删除文件成功");
}
else{
System.out.println("删除文件失败");
}
}

}

配置文件 Sftp_UpDownload.properties

ip=127.0.0.1
port=22
user=test
psw=test
servicePath=testpath

下载的get方法详情 API   http://blog.csdn.net/rangqiwei/article/details/9002046

上传的put方法详情 API  http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html

时间: 2024-11-04 15:19:11

sftp文件上传和下载的相关文章

SFTP文件上传与下载

SFTP是对ftp进行加密的一种文件协议. 首先是先引入:jsch-0.1.42-sources.jar与jsch-0.1.42.jar包 SFTP文件上传与下载. import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; import java.util.Vector; import com.jcraft.jsch.Chan

JAVA SFTP文件上传、下载及批量下载

1.jsch官方API查看地址(附件为需要的jar) http://www.jcraft.com/jsch/ 2.jsch简介 JSch(Java Secure Channel)是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序. SFTP(Secure File Transfer Protocol)安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输

SFTP文件上传与下载(window 上传文件到linux服务器)

一.文件上传 说明1:所谓上传window上的文件上传到linux上 说明2:上传的文件会自动放到当前的用户的家目录 1:打开SFTP的窗口 Alt+p 输入上传命令: 语法: put  path/filename.txt Put  -r  path/文件夹 或者 put  "path/filename.txt" Put  -r  "path/文件夹" 再或者 直接拖拽(有的不好使) 二.文件下载 在SFTP窗口里面 1:设置你要下载目标路径 备注一下 如果不设置下

基于sftp来上传和下载文件

1. 什么是sftp? sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.主要用来在Linux系统进行文件的上传和下载,无需其他的附属软件或者工具. 2. 如何打开sftp? Linux下直接在终端中输入:sftp username[email protected] ip(or remote host name).出现验证时,只需填入正确的密码即可实现远程链接.登入成功后终端呈现出:sftp>.... sftp在非

java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html https://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html https://www.cnblogs.com/qdwyg2013/p/5650764.html#top 引入jar包的maven依赖如下所示:

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

深入分析JavaWeb Item40 -- 文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

文件上传与下载!

1.上传: 1.上传数据的类型:字符,字节 1.文本类型(字符):通过url网址的?:通过表单元素:AJAX. 2.文件类型(字节):通过表单元素(file). 2.上传文件的方式: 1.form表单实现文件上传:常用方式(上传文件用post,不用get,因为get方式对于上传量有限) 通过鼠标单击,在File标签中选择的文件,才能上传. 2.通过AJAX实现文件上传:禁用方式   AJAX的数据传递通过javascript脚本取值.如果传递文件,那么也需要通过javascript脚本获取文件内

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo