1. 程式人生 > 實用技巧 >ftp連線工具類

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();
        }
    }
}