zoukankan      html  css  js  c++  java
  • ftp连接工具类

    1.要引入的包

     <!-- 文件上传组件 -->
    
            <dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId>
                <version>0.1.54</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.10.3</version>
            </dependency>
            <!-- 文件流操作 -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>
            <!-- 文件流操作 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.4</version>
            </dependency>
    

    2.代码

    package com.haiot.common.upload;
    
    import com.jcraft.jsch.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import java.io.InputStream;
    import java.util.Properties;
    @Component
    public class FtpUtil {
        private static Logger logger = LoggerFactory.getLogger(FtpUtil.class);
        /**
         * ftp服务器ip地址
         */
        private static String host;
        @Value("${ftp.host}")
        public void setHost(String val){
            FtpUtil.host = val;
        }
        /**
         * 端口
         */
        private static int port;
        @Value("${ftp.port}")
        public void setPort(int val){
            FtpUtil.port = val;
        }
        /**
         * 用户名
         */
        private static String userName;
        @Value("${ftp.userName}")
        public void setUserName(String val){
            FtpUtil.userName = val;
        }
        /**
         * 密码
         */
        private static String password;
        @Value("${ftp.password}")
        public void setPassword(String val){
            FtpUtil.password = val;
        }
        /**
         * 存放图片的根目录
         */
        private static String rootPath;
        @Value("${ftp.rootPath}")
        public void setRootPath(String val){
            FtpUtil.rootPath = val;
        }
        /**
         * 存放图片的路径
         */
        private static String imgUrl;
        @Value("${ftp.img.url}")
        public void setImgUrl(String val){
            FtpUtil.imgUrl = val;
        }
        /**
         * 获取连接
         */
        private static ChannelSftp getChannel() throws Exception{
            JSch jsch = new JSch();
            //->ssh root@host:port
            Session sshSession = jsch.getSession(userName,host,port);
            //密码
            sshSession.setPassword(password);
            Properties sshConfig = new Properties();
            sshConfig.put("StrictHostKeyChecking", "no");
            sshSession.setConfig(sshConfig);
            sshSession.connect();
            Channel channel = sshSession.openChannel("sftp");
            channel.connect();
            return (ChannelSftp) channel;
        }
        /**
         * ftp上传图片
         * @param inputStream 图片io流
         * @param imagePath 路径,不存在就创建目录
         * @param imagesName 图片名称
         * @return urlStr 图片的存放路径
         */
        public static String putImages(InputStream inputStream, String imagePath, String imagesName){
            try {
                ChannelSftp sftp = getChannel();
                String path = rootPath + imagePath + "/";
                createDir(path,sftp);
                //上传文件
                sftp.put(inputStream, path + imagesName);
                logger.info("上传成功!");
                sftp.quit();
                sftp.exit();
                //处理返回的路径
                String resultFile;
                resultFile = imgUrl + imagePath + imagesName;
                return resultFile;
            } catch (Exception e) {
                logger.error("上传失败:" + e.getMessage());
            }
            return "";
        }
        /**
         * 创建目录
         */
        private static void createDir(String path,ChannelSftp sftp) throws SftpException {
            String[] folders = path.split("/");
            sftp.cd("/");
            for ( String folder : folders ) {
                if ( folder.length() > 0 ) {
                    try {
                        sftp.cd( folder );
                    }catch ( SftpException e ) {
                        sftp.mkdir( folder );
                        sftp.cd( folder );
                    }
                }
            }
        }
        /**
         * 删除图片
         */
        public static void delImages(String imagesName){
            try {
                ChannelSftp sftp = getChannel();
                String path = rootPath + imagesName;
                sftp.rm(path);
                sftp.quit();
                sftp.exit();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  • 相关阅读:
    Ubuntu 11.10版本下的软件中心安装软件的默认路径
    C++中构造函数调用与申明方式的关系
    VMware Workstation 虚拟机(客户机)创建和主机共享文件夹
    观察者模式——三英雄战吕布
    如何在yarn上运行Hello World(二)
    Cat 客户端如何构建调用链消息树
    Cat 跨线程之 TaggedTransaction 用法和原理分析
    Cat 客户端采用什么策略上报消息树
    Cat 跨线程之 ForkedTransaction 用法和原理分析
    jest for elasticsearch
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/13652174.html
Copyright © 2011-2022 走看看