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实现文件上传下载)的更多相关文章

  1. windows上python上传下载文件到linux服务器指定路径【转】

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

  2. Java实现上传文件到指定服务器指定目录

    前言需求 使用freemarker生成的静态文件,统一存储在某个服务器上.本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch.毕竟有现成的就很舒服,在此介绍给大家. 具体实现 引入的pom ...

  3. summernote图片上传功能保存到服务器指定文件夹+php代码+java方法

    1.summernote富文本编辑器 summernote是一款基于bootstrap的富文本编辑器,是一款十分好用的文本编辑器,还附带有图片和文件上传功能. 那么在我们网站中想吧这个图片上传到服务器 ...

  4. PEM文件和private.key文件生成IIS服务器所需的pfx文件(配置SSL用)

    第一步:输入域名,点击"创建免费的SSL证书"按钮,如图 第二步:输入邮箱,点击创建,如图 创建成功后,需要进行dns验证,结果图如下: 第三步:在域名所在的云服务器上,添加域名解 ...

  5. cmake指定程序输出目录和库文件输出目录和拷贝文件

    概述 本文样式环境: win10+cmake 3.18 本文将介绍使用CMAKE配置项目输出目录和 LIbrary项目的输出目录 本文将介绍 cmake的file函数的基础用法之拷贝文件 重点, 这些 ...

  6. 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器

    引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...

  7. Javaweb向服务器上传文件以及从服务器下载文件的方法

    先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...

  8. python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小

    本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类似Windows如下功能: 模块介绍: from ftplib import F ...

  9. 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 ...

随机推荐

  1. Hadoop之hadoop fs和hdfs dfs、hdfs fs三者区别

      适用范围 案例 备注 小记 hadoop fs 使用范围最广,对象:可任何对象       hadoop dfs 只HDFS文件系统相关       hdfs fs 只HDFS文件系统相关(包括与 ...

  2. 如何将自己在github写的android library开源,让大家依赖使用

    编写library并上传至github后,让别人可以通过gradle的方式添加依赖 http://www.jianshu.com/p/9aedfd749cec

  3. Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Api (3) - Stream的终端操作

    Stream API Java8中有两大最为重要的改变:第一个是 Lambda 表达式:另外一个则是 Stream API(java.util.stream.*). Stream 是 Java8 中处 ...

  4. 网络KPI异常检测之时序分解算法

    时间序列数据伴随着我们的生活和工作.从牙牙学语时的“1, 2, 3, 4, 5, ……”到房价的走势变化,从金融领域的刷卡记录到运维领域的核心网性能指标.时间序列中的规律能加深我们对事物和场景的认识, ...

  5. Clear Writer v1.7 更新

    拖更了这么久了的我终于来更新了--这可能是今年上半年最后一次更新了-- 这次我打算把 Clear Writer 公开发布了. 下载链接 下载链接在这里. (这次用蓝奏,不用奶牛快传了) Clear W ...

  6. 线上服务的FGC问题排查,看这篇就够了!

    线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...

  7. 面试必问:分布式锁实现之zk(Zookeeper)

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  8. mysql explain的type的

    导语 很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了.这些事情往往发生在一些学生亦或刚入职场但之前又没有很好数据库基础的小白身上,但所谓闻道有先后,只要我 ...

  9. 关于Ubuntu系统忘记密码的解决方法合集

    昨天有台机器的Ubuntu系统密码出了问题,一直提示错误.由于里面的数据比较重要,不建议重装系统,所以百度了一会,最终解决了忘记密码问题.整理了一个大合集分享出来. 第一种:参考教程如下       ...

  10. Linux下安装java环境

    准备工作: linux环境 xshell6 1.在Windows本地www,oracle.com下载对应的linux系统的JDK安装包,我下载的是 2.下载下来后,通过xftp远程传输到linux服务 ...