zoukankan      html  css  js  c++  java
  • 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());
    // }
    }


    }
  • 相关阅读:
    jvm调试相关:jmap失效下找到alternatives神器
    作业2:java内存模型图示
    Python脚本:Linux自动化执行Python脚本
    Nodejs:单线程为什么能支持高并发?
    作业1:java虚拟机内存模型图示
    SpringBoot中获取spring.profiles.active的值
    线程中使用注解出现空指针如何解决?
    java7:核心技术与最佳实践读书笔记——对象生命周期
    java7:核心技术与最佳实践读书笔记——类加载
    虚拟机上不了网啦
  • 原文地址:https://www.cnblogs.com/lendar/p/13266443.html
Copyright © 2011-2022 走看看