最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot接入ftp/ftps并上傳文件和配置的代碼指南

 更新時間:2024年12月20日 10:58:12   作者:天河歸來  
接入ftp服務(wù)器,在springboot上實現(xiàn)起來也不算復(fù)雜,本文主要講下如何在springboot下接入ftp服務(wù)上傳文件,并對出現(xiàn)的問題做一些記錄,ftp服務(wù)的參數(shù)配置等,需要的朋友可以參考下

1. 整體描述

接入ftp服務(wù)器,在springboot上實現(xiàn)起來也不算復(fù)雜,本文主要講下如何在springboot下接入ftp服務(wù)上傳文件,并對出現(xiàn)的問題做一些記錄,ftp服務(wù)的參數(shù)配置等

2. 具體實現(xiàn)

2.1 引入pom

在springboot的配置文件引入:

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.8.0</version>
        </dependency>

apache的包,其中有ftp相關(guān)的類

2.2 創(chuàng)建ftps連接

其中使用FTPClient創(chuàng)建的是FTP連接,F(xiàn)TPSClient創(chuàng)建的是FTPS連接,我這里創(chuàng)建了FTPS連接

    /**
     * 打開FTP連接
     *
     * @param hostname hostname
     * @param port     port
     * @param username username
     * @param password password
     */
    public static FTPSClient openFTP(String hostname, int port, String username, String password) {
        // 顯示方式傳false,隱式方式傳true
        FTPSClient ftpsClient = new FTPSClient(true);
        ftpsClient.setControlEncoding("UTF-8");
        try {
            System.out.println("ftpsClient connect");
            ftpsClient.connect(hostname, port);
            boolean flag = ftpsClient.login(username, password);
            // 切換到被動模式
            ftpsClient.setControlEncoding("UTF-8");
            ftpsClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpsClient.enterLocalPassiveMode();
            ftpsClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
            ftpsClient.execPROT("P");
            ftpsClient.setAuthValue("TLS");

            if (!flag) {
                System.out.println("login failed");
                return null;
            }

            String path = ftpsClient.printWorkingDirectory();
            System.out.println("path:" + path);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return ftpsClient;
    }

2.3 上傳文件

/**
     * 創(chuàng)建多層目錄文件,如果有ftp服務(wù)器已存在該文件,則不創(chuàng)建,如果無,則創(chuàng)建
     *
     * @param filePath   上傳文件本地路徑
     * @param ftpPath    上傳文件FTP路徑
     * @param ftpsClient ftp客戶端
     */
    public static void uploadFileToFTP(String filePath, String ftpPath, FTPSClient ftpsClient) {
        try {
            File file = new File(filePath);

            boolean changeFlag = ftpsClient.changeWorkingDirectory(ftpPath);
            System.out.println("changeFlag:" + changeFlag);
            if (!changeFlag) {
                boolean createFlag = createDirectory(ftpPath, ftpsClient);
                System.out.println("createFlag:" + createFlag);
            }

            String uploadPath = ftpsClient.printWorkingDirectory();
            System.out.println("uploadPath:" + uploadPath);

            ftpsClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            boolean uploadFlag = ftpsClient.storeUniqueFile(file.getName(), new FileInputStream(file));

            System.out.println("uploadFlag:" + uploadFlag);
            System.out.println("uploadFlag:" + ftpsClient.getReplyString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.4 關(guān)閉連接

    /**
     * 關(guān)閉FTP連接
     *
     * @param ftpsClient ftp客戶端
     */
    public static void closeFTP(FTPSClient ftpsClient) {
        try {
            ftpsClient.logout();
            ftpsClient.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.5 創(chuàng)建FTP目錄

/**
     * 創(chuàng)建多層目錄文件,如果有ftp服務(wù)器已存在該文件,則不創(chuàng)建,如果無,則創(chuàng)建
     *
     * @param remote     目錄
     * @param ftpsClient ftp客戶端
     */
    public static boolean createDirectory(String remote, FTPSClient ftpsClient) {
        String directory = remote;
        try {
            if (!remote.endsWith("/")) {
                directory = directory + "/";
            }
            // 如果遠程目錄不存在,則遞歸創(chuàng)建遠程服務(wù)器目錄
            if (!directory.equals("/") && !ftpsClient.changeWorkingDirectory(directory)) {
                int start = 0;
                int end = 0;
                if (directory.startsWith("/")) {
                    start = 1;
                } else {
                    start = 0;
                }
                end = directory.indexOf("/", start);
                String paths = "", path = "";
                while (true) {
                    String subDirectory = remote.substring(start, end);
                    path = path + "/" + subDirectory;
                    // 目錄不存在就創(chuàng)建
                    if (!ftpsClient.changeWorkingDirectory(subDirectory)) {
                        if (ftpsClient.makeDirectory(subDirectory)) {
                            ftpsClient.changeWorkingDirectory(subDirectory);
                        }
                    }
                    paths = paths + "/" + subDirectory;
                    start = end + 1;
                    end = directory.indexOf("/", start);
                    // 檢查所有目錄是否創(chuàng)建完畢
                    if (end <= start) {
                        break;
                    }
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

2.6 main方法

public static void main(String[] args) {

        // 打開ftp連接
        FTPSClient ftpsClient = openFTP("192.168.1.100", 10012, "test1", "123456");
        if (null == ftpsClient) {
            return;
        }
        // 上傳文件
        uploadFileToFTP("C:\\Users\\10187\\Desktop\\ftp.txt", "/TEST/PICTURE", ftpsClient);
        // 下載文件
        downloadFileFromFTP(ftpsClient);

        // 關(guān)閉ftp連接
        closeFTP(ftpsClient);
    }

2.7 運行結(jié)果

運行結(jié)果

log顯示上傳成功,去ftp對應(yīng)目錄也能看到上傳的文件。

3. FTP服務(wù)器配置

服務(wù)器相關(guān)配置也需要修改一下,要不登錄上傳等會報錯。FTP的配置文件一般在/etc/vsftpd下面,有個vsftpd.conf的文件

3.1 修改require_ssl_reuse參數(shù)

如果上傳文件的時候報錯:522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page。
需要修改這個參數(shù),默認是YES,需要改成NO

3.2 設(shè)置FTPS連接

第一步:創(chuàng)建私鑰、證書

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd_ssl_key.pem -out /etc/vsftpd/vsftpd_ssl_cert.pem

第二步:添加以下配置到配置文件

ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/vsftpd_ssl_cert.pem
rsa_private_key_file=/etc/vsftpd/vsftpd_ssl_key.pem
require_ssl_reuse=NO

第三步:重啟ftp服務(wù)

systemctl restart vsftpd

3.3 設(shè)置FTPS連接為隱式連接

FTPS支持顯示連接和隱式連接兩種,如果需要隱式連接,修改配置文件。添加如下配置:

implicit_ssl=YES

然后重啟ftp服務(wù)即可。

4. 總結(jié)

以上就是配置和連接FTP/FTPS的基本操作,當(dāng)然還有一些復(fù)雜的操作和配置,就自己探索吧。

到此這篇關(guān)于SpringBoot接入ftp/ftps并上傳文件和配置的代碼指南的文章就介紹到這了,更多相關(guān)SpringBoot接入ftp/ftps并上傳和配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot3中使用虛擬線程的詳細過程

    SpringBoot3中使用虛擬線程的詳細過程

    虛擬線程主要解決的問題是減少I/O密集型任務(wù)的I/O阻塞,這篇文章主要介紹了SpringBoot3中使用虛擬線程的詳細過程,需要的朋友可以參考下
    2025-06-06
  • 實例詳解SpringMVC入門使用

    實例詳解SpringMVC入門使用

    大家好,本篇文章主要講的是實例詳解SpringMVC入門使用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 一文梳理Java超大型文件讀取的18種方法和性能

    一文梳理Java超大型文件讀取的18種方法和性能

    這篇文章主要為大家詳細介紹了Java中超大型文件讀取的18種方法和性能對比,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • springboot使用Scheduling實現(xiàn)動態(tài)增刪啟停定時任務(wù)教程

    springboot使用Scheduling實現(xiàn)動態(tài)增刪啟停定時任務(wù)教程

    這篇文章主要介紹了springboot使用Scheduling實現(xiàn)動態(tài)增刪啟停定時任務(wù)教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • java.lang.FileNotFoundException 異常的正確解決方法(親測有效)

    java.lang.FileNotFoundException 異常的正確解決方法(親測有效)

    java.io.FileNotFoundException是一個在文件操作過程中常見的異常,它屬于IOException的一個子類,這篇文章主要介紹了java.lang.FileNotFoundException 異常的正確解決方法(親測有效),需要的朋友可以參考下
    2024-01-01
  • Java實例講解枚舉enum的實現(xiàn)

    Java實例講解枚舉enum的實現(xiàn)

    枚舉法的本質(zhì)就是從所有候選答案中去搜索正確的解,枚舉算法簡單粗暴,他暴力的枚舉所有可能,盡可能地嘗試所有的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Netty學(xué)習(xí)教程之基礎(chǔ)使用篇

    Netty學(xué)習(xí)教程之基礎(chǔ)使用篇

    Netty是由JBOSS提供的一個Java開源框架。Netty提供異步的、事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序。下面這篇文章主要給大家介紹了關(guān)于Netty基礎(chǔ)使用的相關(guān)資料,需要的朋友可以參考下。
    2017-05-05
  • SpringBoot+thymeleaf+Echarts+Mysql 實現(xiàn)數(shù)據(jù)可視化讀取的示例

    SpringBoot+thymeleaf+Echarts+Mysql 實現(xiàn)數(shù)據(jù)可視化讀取的示例

    本文主要介紹了SpringBoot+thymeleaf+Echarts+Mysql 實現(xiàn)數(shù)據(jù)可視化讀取的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • win10安裝rabbitMQ的詳細步驟

    win10安裝rabbitMQ的詳細步驟

    RabbitMQ是一個開源的消息中間件(Message Broker),它基于AMQP協(xié)議設(shè)計,用于在分布式系統(tǒng)中實現(xiàn)消息的高效、可靠傳輸,本文給打擊介紹了win10安裝rabbitMQ的詳細步驟,文中通過圖文講解的非常詳細,需要的朋友可以參考下
    2024-06-06
  • 解決swagger2中@ApiResponse的response不起作用

    解決swagger2中@ApiResponse的response不起作用

    這篇文章主要介紹了解決swagger2中@ApiResponse的response不起作用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

图们市| 云和县| 宁城县| 洛阳市| 鱼台县| 汉源县| 高平市| 贵阳市| 泸州市| 余姚市| 克什克腾旗| 新蔡县| 城口县| 永春县| 含山县| 彩票| 嫩江县| 奉化市| 自治县| 海林市| 洞头县| 兴和县| 凤冈县| 区。| 临泉县| 水城县| 灵丘县| 新兴县| 右玉县| 铜山县| 四平市| 新晃| 长武县| 关岭| 思茅市| 日土县| 黄石市| 平阴县| 静乐县| 苍山县| 且末县|