Java实现上传文件到指定服务器指定目录(ChannelSftp实现文件上传下载)
package com.tianyang.task.utils; import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties; import ch.ethz.ssh2.Connection; import com.jcraft.jsch.*;
import com.tianyang.biz.constants.TYEnumConstants;
import com.tianyang.task.constants.TYTaskConstants;
import org.apache.log4j.Logger; public class SftpClientUtil {
protected static Logger logger = Logger.getLogger(SftpClientUtil.class); /** 主机 */
private final static String host = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_SFTP();
/** 端口 */
private final static int port = Integer.valueOf(TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_SFTP_PORT());
/** 用户名 */
private final static String username = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_USERNAME();
/** 密码 */
private final static String password = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_PASSWORD();
/** 目录 */
private final static String directory = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_DIRECTORY();
/** url地址 */
private final static String baseUrl = TYTaskConstants.tyTaskConfig.getACQUISITION_SYSTEM_BASEURL(); /**
* 上传单个文件
* @param remoteFolder
* 上传到SFTP服务器的路径
* @param sourceFile
* 上传的文件地址
* @param remoteFileName
* 上传到SFTP服务器后的文件名
*
* @throws Exception
*/
public static String uploadFile(String remoteFolder,String sourceFile, String remoteFileName) throws Exception {
long start = System.currentTimeMillis();
remoteFolder = directory + remoteFolder; File file = new File(sourceFile);
InputStream fileStream = new FileInputStream(file); // 提升作用域
ChannelSftp sftp = connect();
try{
//如果文件夹不存在,则创建文件夹
if(sftp.ls(remoteFolder) == null){
sftp.mkdir(remoteFolder);
}
//切换到指定文件夹
sftp.cd(remoteFolder);
}catch (SftpException e){
//创建不存在的文件夹,并切换到文件夹
sftp.mkdir(remoteFolder);
sftp.cd(remoteFolder);
}
sftp.put(fileStream, remoteFileName);
disconnect(sftp);
logger.info("文件上传成功!! 耗时:{"+(System.currentTimeMillis() - start)+"}ms");
return baseUrl + remoteFileName;
} /**
* 删除文件
* @param deleteFile
* 要删除的文件
*
* @throws Exception
*/
public void delete(String deleteFile) throws Exception {
ChannelSftp sftp = connect();
sftp.cd(directory);
sftp.rm(deleteFile);
disconnect(sftp);
} /**
* 连接sftp服务器
*
* @throws Exception
*/
public static ChannelSftp connect() throws Exception {
JSch jsch = new JSch();
try{
//采用指定的端口连接服务器
Session session = jsch.getSession(username,host,port);
if(password != null){
//设置登陆主机的密码
session.setPassword(password);
} Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
session.setConfig(sshConfig);
session.connect(); //创建sftp通信通道
Channel channel = session.openChannel("sftp");
channel.connect();
logger.info("sftp server connect success !!");
return (ChannelSftp) channel;
}catch (JSchException e){
logger.error("SFTP服务器连接异常!!", e);
throw new Exception("SFTP服务器连接异常!!",e);
}
} /**
* Disconnect with server
*
* @throws Exception
*/
public static void disconnect(ChannelSftp sftp) throws Exception {
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
} else if (sftp.isClosed()) {
}
}
} public static void main(String[] args){
//数据文件名
String dataFileName = "008_ZQQK_U_20200707_I.txt";
String dyw_key1 = "/Users/lpl/Documents/myself/tempfile/008_ZQQK_U_20181108_I.txt";
String resultDto1 = null;
try { resultDto1 = new SftpClientUtil().uploadFile("20181108", dyw_key1, dataFileName);
} catch (Exception e) {
e.printStackTrace();
}
// if(resultDto1 != null && resultDto1.getCode().equals("0000")) {
System.out.println("--上送ZQQK文件-----成功, 文件key = " + resultDto1);
// }else{
// System.out.println("--上送ZQQK文件-----失败, 文件key = " + resultDto1.getMessage());
// }
} }
Java实现上传文件到指定服务器指定目录(ChannelSftp实现文件上传下载)的更多相关文章
- windows上python上传下载文件到linux服务器指定路径【转】
从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...
- Java实现上传文件到指定服务器指定目录
前言需求 使用freemarker生成的静态文件,统一存储在某个服务器上.本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch.毕竟有现成的就很舒服,在此介绍给大家. 具体实现 引入的pom ...
- summernote图片上传功能保存到服务器指定文件夹+php代码+java方法
1.summernote富文本编辑器 summernote是一款基于bootstrap的富文本编辑器,是一款十分好用的文本编辑器,还附带有图片和文件上传功能. 那么在我们网站中想吧这个图片上传到服务器 ...
- PEM文件和private.key文件生成IIS服务器所需的pfx文件(配置SSL用)
第一步:输入域名,点击"创建免费的SSL证书"按钮,如图 第二步:输入邮箱,点击创建,如图 创建成功后,需要进行dns验证,结果图如下: 第三步:在域名所在的云服务器上,添加域名解 ...
- cmake指定程序输出目录和库文件输出目录和拷贝文件
概述 本文样式环境: win10+cmake 3.18 本文将介绍使用CMAKE配置项目输出目录和 LIbrary项目的输出目录 本文将介绍 cmake的file函数的基础用法之拷贝文件 重点, 这些 ...
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...
- Javaweb向服务器上传文件以及从服务器下载文件的方法
先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...
- python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小
本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类似Windows如下功能: 模块介绍: from ftplib import F ...
- Linux服务器之间免密同步文件、重启R服务
机器:ML-01/ML-02/ML-03 需求: 1.在ML-01上自动将文件同步至ML-02/ML-03 2.在ML-01上通过脚本重启ML-02/ML-03上的R服务 说明:以下示例中,ML-02 ...
随机推荐
- [原创][开源] SunnyUI.Net 字体图标
SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...
- Mybatis详解(二) sqlsession的创建过程
我们处于的位置 我们要清楚现在的情况. 现在我们已经调用了SqlSessionFactoryBuilder的build方法生成了SqlSessionFactory 对象. 但是如标题所说,要想生成sq ...
- v-bind 缩写
Vue.js 为两个最为常用的指令提供了特别的缩写: <!-- 完整语法 --> <a v-bind:href="url"></a> <! ...
- 02、MyBatis XML配置
MyBatis-全局配置文件 在MyBatis中全局配置文件有着重要的地位,里面有9类行为信息;如果我们要想将MyBatis运用的熟练,配置全局配置文件是必不可少的步骤,所以我们一定要啃下这一块硬骨头 ...
- 深入理解Js数组
深入理解Js数组 在Js中数组存在两种形式,一种是与C/C++等相同的在连续内存中存放数据的快数组,另一种是HashTable结构的慢数组,是一种典型的字典形式. 描述 在本文中所有的测试都是基于V8 ...
- Flask URL构建
Flask URL构建 url_for()函数对于动态构建特定函数的URL非常有用.该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分. 以下脚本演示了如何使 ...
- 图解KMP以及next数组的求法
在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个模式串P的出现位置.此算法通过运用对这个模式串在不匹配时本身就包含足够的信息来确定 ...
- 多语言工作者の十日冲刺<7/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第七天(05.06) 作业正文 ...
- 微信小程序-返回并更新上一页面的数据
小程序开发过程中经常有这种需求,需要把当前页面数据传递给上一个页面,但是wx.navigateBack()无法传递数据. 一般的办法是把当前页面数据放入本地缓存,上一个页面再从缓存中取出. 除此之外还 ...
- elasticserach数据库深度分页查询的原理
深度分页存在的问题 https://segmentfault.com/a/1190000019004316?utm_source=tag-newest 在实际应用中,分页是必不可少的,例如,前端页面展 ...