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 (转载)
随机推荐
- MR+meta分析的摘录
第四篇公众号:来自微信 天桥下的卖艺者 零基础说科研,仅为个人学习用,如有侵权,可以删除 吸烟没什么创意,唯一的创意就是加入了MR和meta分析,作者显示介绍吸烟与多种疾病之间的因果关系扔不明确, 第 ...
- java: 找不到符号 java: Compilation failed: internal java compiler error
java: 找不到符号 java: Compilation failed: internal java compiler error 1.File---->Setting------>ja ...
- mysql8 windows 数据库名 表名 大小写
由于Apollo的SQL 脚本是大小写的.mysql8 默认又是纯小写的. 解决方法: 方法1.卸载MYSQL,重新安装MYSQL时,高级选项中指定区分大写小.这种会清空所有库和数据.不建议. 方法2 ...
- invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法
nvalid comparison: java.util.ArrayList and java.lang.String 异常解决方法异常原因首先我们可以确定是在mybatis的xml中的 list 操 ...
- 第一篇Scrum冲刺博客--原班人马打造队
0 项目地址 点此进入 1 第一次开会/任务认领 1.1 第一次例会(2024.4.27) 第一次开会照片记录 1.2 开发认领 在查看老师在实验报告中学长的博客给了我一定的启发,我在腾讯表格中创建了 ...
- Masonry的进阶使用技巧
Masonry是iOS开发中常见的视图约束框架,但是有人对他的使用还是浅尝辄止,接下来会提出几点比较少见但是又十分便捷的使用技巧. mas_greaterThanOrEqualTo mas_great ...
- Linux-swap管理
什么是Swap Swap:交换空间,即虚拟内存,用于解决内存不足的问题. 在内存不足的时候,会将内存中不常使用的部分存入硬盘,使得内存得以腾出空间供新的程序使用. 那么,虚拟内存即为硬盘中的部分. S ...
- Kafka Stream 以及其他流处理框架对比
1. Kafka Stream Introduction 假设我们需要对kafka 消息做流数据分析,例如: 对部分消息做过滤 每分钟计算一次收到了多少消息 这种情况下,对于消息过滤以及定时统计,甚至 ...
- Zynq 7000的3种IO
概念 MIO MIO:多功能IO接口(分配在 GPIO 的 Bank0 和Bank1),属于Zynq的PS部分,在芯片外部有54个引脚.这些引脚可以用在GPIO.SPI.UART.TIMER.Ethe ...
- B 站和小红书又又又崩了,罪魁祸首竟然又是他。。。
大家好,我是凌晨. 今天上午10点左右,我打开B站发现无法刷新视频列表和评论区,收藏夹和弹幕也均不可用. 原以为是手机网络问题,换网络重启手机都还是不行,第一时间打开微博,果然,B站崩了的新闻荣登榜首 ...