sftp文件上传下载方法
随着信息化、数字化的发展,企业对数据安全及应用安全意识普遍加强,在数据文件传输过程中,一般建议使用sftp协议进行文件传输,sftp文件操作脚本如下:
sftp操作主要有三种方式,分别是sftp客户端操作、sdk操作、操作系统命令操作,针对sdk方式。
一、sdk方式:
<!-- sftp集成jar -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
public class SftpUtils {
private static final Logger logger = LoggerFactory.getLogger(SftpUtils.class);
private static final String SESSION_CONFIG_STRICT_HOST_KEY_CHECKING = "StrictHostKeyChecking";
/**
* 创建SFTP连接
* @return
* @throws Exception
*/
public static ChannelSftp createSftp(String username,String password,String host,int port) throws Exception {
JSch jsch = new JSch();
logger.info(("Try to connect sftp" + username + "@" + host + "], use password[" + password));
Session session = createSession(jsch,host, username, port);
session.setPassword(password);
session.connect(15000);
logger.info("Session connected to {"+ host);
Channel channel = session.openChannel("sftp");
channel.connect();
logger.info("Channel created to"+ host);
return (ChannelSftp) channel;
}
/**
* 创建session
* @param jsch
* @param host
* @param username
* @param port
* @return
* @throws Exception
*/
private static Session createSession(JSch jsch, String host, String username, Integer port) throws Exception {
Session session = null;
if (port <= 0) {
session = jsch.getSession(username, host);
} else {
session = jsch.getSession(username, host, port);
}
if (session == null) {
throw new Exception(host + " session is null");
}
session.setConfig(SESSION_CONFIG_STRICT_HOST_KEY_CHECKING, "no");
return session;
}
/**
* 关闭连接
* @param sftp
*/
public static void disconnect(ChannelSftp sftp) {
try {
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
} else if (sftp.isClosed()) {
//log.info("sftp is closed already");
System.out.println("sftp is closed already");
}
if (null != sftp.getSession()) {
sftp.getSession().disconnect();
}
}
} catch (JSchException e) {
e.printStackTrace();
}
}
public static void download(String sftpUrl, String localFilePath, String sftpUsername, String sftpPassword, String sftpControlEncoding,String host,String port,String fileName) throws Exception {
String username = StringUtils.isEmpty(sftpUsername) ? ConfigConstants.getSftpUsername() : sftpUsername;
String password = StringUtils.isEmpty(sftpPassword) ? ConfigConstants.getSftpPassword() : sftpPassword;
String controlEncoding = StringUtils.isEmpty(sftpControlEncoding) ? ConfigConstants.getSftpControlEncoding() : sftpControlEncoding;
logger.debug("SFTP connection url:{}, username:{}, password:{}, controlEncoding:{}, localFilePath:{}", sftpUrl, username, password, controlEncoding, localFilePath);
String remoteFilePath = sftpUrl.split(host + "/")[1].split("\\?")[0];
String encodefileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/")+1);
String dir = remoteFilePath.replace("/" + encodefileName,"");
ChannelSftp channelSftp = createSftp(username,password,host,Integer.parseInt(port));
OutputStream outputStream = Files.newOutputStream(Paths.get(localFilePath));
channelSftp.cd(dir);
channelSftp.get(fileName,outputStream);
logger.debug("SFTP download success");
outputStream.flush();
outputStream.close();
disconnect(channelSftp);
}
public static void main(String[] args) throws GalimatiasParseException {
String url = ("sftp://192.168.1.1/upload/test/demo/file.zip?sftp.username=sftpadmin&sftp.password=sftp&sftp.control.encoding=UTF-8");
String[] arrsy = url.split("192.168.1.1/");
System.out.println(url.split("192.168.1.1/"));
System.out.println(arrsy[1].split("\\?")[0]);
String remoteFilePath = url.split("192.168.1.1" + "/")[1].split("\\?")[0];
}
}
二、客户端方式:
1 #!/bin/bash
2
3 SFTP_HOST_IP=192.168.1.1
4 SFTP_HOST_PORT=22
5 SFTP_HOST_USER=sftpadmin
6 SFTP_HOST_PASSWD=sftp
7 SFTP_BASE_DIR=upload
8 SYSTEM_CODE=$1
9 UPLOAD_FILE=$2
10
11 UPLOAD_DIR=${SFTP_BASE_DIR}/${SYSTEM_CODE}
12 sftpPutFiles(){
13 ftpUser=$1
14 ftpPwd=$2
15 host=$3
16 port=$4
17 remoteDir=$5
18 uploadFile=$6
19 lftp -u ${ftpUser},${ftpPwd} sftp://${host}:${port} <<EOF
20 cd ${remoteDir}
21 mput ${uploadFile}
22 bye
23 EOF
24 }
25 echo "上传文件开始:" +`date`
26 sftpPutFiles $SFTP_HOST_USER $SFTP_HOST_PASSWD $SFTP_HOST_IP $SFTP_HOST_PORT $UPLOAD_DIR $UPLOAD_FILE
27 echo "上传文件结束:" +`date`
28
29 sftpGetFiles(){
30 ftpUser=$1
31 ftpPwd=$2
32 host=$3
33 port=$4
34 remoteDir=$5
35 downFile=$6
36 lftp -u ${ftpUser},${ftpPwd} sftp://${host}:${port} <<EOF
37 cd ${remoteDir}
38 set xfer:clobber on
39 mget ${downFile}
40 bye
41 EOF
42 }
43 echo "下载文件开始:" +`date`
44 sftpGetFiles $SFTP_HOST_USER $SFTP_HOST_PASSWD $SFTP_HOST_IP $SFTP_HOST_PORT $UPLOAD_DIR
45 echo "下载文件结束:" +`date`
三、操作系统命令方式:
1 上传sftp:
2 curl -T app.zip sftp://sftpuser:sftppasswd@127.0.0.1:12024/data/sftp_data/
3 下载sftp:
4 curl sftp://sftpuser:sftppasswd@127.0.0.1:12024/data/sftp_data/file.txt -o file.txt
sftp文件上传下载方法的更多相关文章
- 使用PuTTY时的文件上传下载方法
如果你是个PuTTY重度用户,在使用ssh连上一个远端机器工作了好一阵子后,发现自己需要对 当前会话 上传/下载文件,要怎样才能简单快捷呢? 最简单的方式 最简单的方法: 安装WinSCP或者File ...
- 我的代码库-Java8实现FTP与SFTP文件上传下载
有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP ...
- Java实现FTP与SFTP文件上传下载
添加依赖Jsch-0.1.54.jar <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <dependency ...
- Jsch - java SFTP 文件上传下载
使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...
- SFTP 文件上传下载工具类
SFTPUtils.java import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsEntry; import lombok.e ...
- Python Paramiko实现sftp文件上传下载以及远程执行命令
一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...
- java实现sftp文件上传下载
/** * * @param filePath 文件全路径 * @param ftpPath 上传到目的端目录 * @param username * @param password * @param ...
- 使用ssh 登录Linux 文件上传下载方法
最简单的方法: 安装WinSCP或者Filezilla, 启动该程序,然后自己输入输入主机名.端口.用户名.密码登录,然后在putty里面用pwd命令看看当前目录,再在WinSCP/Filezilla ...
- SFTP 文件上传下载引用代码
http://sha1064616837.iteye.com/blog/2036996 http://www.cnblogs.com/itmanxgl/p/fe5d33512609fe540eb08a ...
- SFTP文件上传下载
http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html (转载)
随机推荐
- nginx002: NGINX的环境变量,基本命令参数,目录关系及gzip优化
NGINX的环境变量,基本命令参数,目录关系及gzip优化 添加环境变量 nginx命令执行方式 nginx [选项] [参数] 通过编译安装的nginx 默认是没有环境变量的,如何设置环境变量,让n ...
- Vue简单自定义Canvas验证码组件。
在您的Vue项目中,是否曾遇到过需要增加验证码来增强账户安全性的情况?这个Vue通用Canvas验证码组件!采用Canvas,实现了高度自定义和灵活的验证码生成方式,让您的网站或应用轻松应对各类验证码 ...
- tomcat部署Jenkins
安装环境 jdk 1.8 tomcat 9.0 jenkins 2.290 准备工作 安装好Tomcat,8080端口启动 安装好jdk,配置好环境变量 ECS服务器安全组放开8080端口 关闭防火墙 ...
- 知名火锅连锁企业,IT 团队如何在数千家门店中先于用户发现故障
该知名火锅连锁企业是中国领先的餐饮企业,上千家门店遍布全球,由于门店餐饮行业的特殊性,需要靠前部署服务,所以在每家餐厅中,会部署相应的服务器,及相应 IT 设备,本地会运行POS.会员.下单等业务.公 ...
- redis主从复制篇
我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务. 而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式. 主从复制概述 主从复制,是指将一台 ...
- url编码和解码分析URLEncoder.encode和URLDecoder.decode
url编码和解码分析 1.Get请求会将参数做默认的url解码操作,接口接收到的值是Get解码后的值.2.可以将Get操作修改成Post操作,这样不会url解码.可以在接口中做url解码.3.在多次传 ...
- 彻底解决C盘不够用的问题(Windows 10)- 常规方法——清垃圾、转虚拟内存、挪大文件
1.清垃圾 2.转虚拟内存 3.挪大文件
- Kotlin 编程语言详解:特点、应用领域及语法教程
什么是 Kotlin? Kotlin 是一种现代.流行的编程语言,由 JetBrains 在 2016 年发布. 自发布以来,它已经变得非常流行,因为它与 Java 兼容(Java 是目前最流行的编程 ...
- 记录一次EF实体跟踪错误
记录一次EF实体跟踪错误 前言 在我写文章编辑接口的,出现了一个实体跟踪的错误,详情如下 System.InvalidOperationException: The instance of entit ...
- Google 发布最新开放大语言模型 Gemma 2,现已登陆 Hugging Face Hub
Google 发布了最新的开放大语言模型 Gemma 2,我们非常高兴与 Google 合作,确保其在 Hugging Face 生态系统中的最佳集成.你可以在 Hub 上找到 4 个开源模型(2 个 ...