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

SpringBoot集成FTP文件服務(wù)器簡單應(yīng)用方式

 更新時(shí)間:2024年07月09日 16:47:54   作者:平平常常一般牛  
這篇文章主要介紹了SpringBoot集成FTP文件服務(wù)器簡單應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot集成FTP實(shí)現(xiàn)創(chuàng)建FTP連接,文件上傳功能;這里用到Apache commont-net;我這里搭建一個(gè)本地FTP服務(wù)器,這里我推薦我這篇文章:搭建本地測試FTP服務(wù)器,可以很輕松的搭建完成

環(huán)境

將Apache commont-net依賴放到pom.xml文件當(dāng)中

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

簡單示例

一個(gè)簡單的參數(shù)配置文件

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * FTP參數(shù)配置文件
 *
 * @author chenlirun
 * @since 2024/3/25
 */
@Data
@Component
@ConfigurationProperties(prefix = "spring.ftp")
public class FtpProperties {

	/**
	 * 服務(wù)器地址
	 */
	private String host;

	/**
	 * 服務(wù)器端口
	 */
	private int port;

	/**
	 * 用戶名
	 */
	private String userName;

	/**
	 * 密碼
	 */
	private String password;

	/**
	 * 工作目錄
	 */
	private String baseUrl;
}
spring:
  ftp:
    host: localhost
    port: 21
    user-name: root
    password: root
    base-url: /demoFile

提供的demo

提供的一個(gè)簡單的創(chuàng)建FTP連接,文件上傳,最后關(guān)閉連接釋放資源。

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.springframework.beans.factory.annotation.Value;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

@Slf4j
public class FTPServer {

	@Value("${spring.ftp.host}")
	private String host;

	@Value("${spring.ftp.port}")
	private int port;

	@Value("${spring.ftp.username}")
	private String userName;

	@Value("${spring.ftp.password}")
	private String password;

	@Value("${spring.ftp.base-url}")
	private String baseUrl;


	@SneakyThrows
	public void uploadFile() {
		// FTP服務(wù)器初始化屬性
		FTPClient ftpClient = new FTPClient();
		// 連接FTP服務(wù)器
		ftpClient.connect(host, port);
		if (!ftpClient.isConnected()) {
			log.error("FTP服務(wù)器連接失敗");
		}
		// 登錄FTP服務(wù)器
		boolean login = ftpClient.login(userName, password);
		if (!login) {
			ftpClient.logout();
			ftpClient.disconnect();
			log.error("FTP服務(wù)器登錄失敗");
		}
		// 設(shè)置FTP字符編碼
		ftpClient.setControlEncoding("utf-8");
		//設(shè)置超時(shí)時(shí)間
		ftpClient.setDataTimeout(Duration.ofSeconds(3));
		//設(shè)置傳輸文件的類型,這里我設(shè)置成二進(jìn)制,保證文件不丟包
		ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

		// 設(shè)置被動(dòng)模式
		ftpClient.enterLocalPassiveMode();

		//切換FTP工作目錄
		boolean isChangeWorkingDir = ftpClient.changeWorkingDirectory(baseUrl);
		if (!isChangeWorkingDir) {
			log.error("切換指定工作目錄失敗了?。?!");
		}

		/**
		 * 上傳文件到FTP服務(wù)器
		 */
		// 將字符串轉(zhuǎn)成InputStream
		InputStream inputStream = IOUtils.toInputStream("aaaa", StandardCharsets.UTF_8);//
		String fileName = "demo.txt";
		//將InputStream流上傳到FTP并保存成alarm.txt
		boolean b = ftpClient.storeFile(fileName, inputStream);
		if (!b) {
			log.error("文件上傳FTP服務(wù)器失敗?。?!");
		}
		// 關(guān)閉流,釋放資源
		inputStream.close();
		// 如果FTP處于連接狀態(tài),則關(guān)閉連接和登錄
		if (ftpClient.isConnected()) {
			ftpClient.logout();
			ftpClient.disconnect();
		}
	}
}

FTPClient類方法簡單介紹

FTPClient類是Apache Commons Net庫中的一個(gè)類,用于實(shí)現(xiàn)FTP(文件傳輸協(xié)議)客戶端的功能。

這個(gè)類提供了許多方法,用于與FTP服務(wù)器建立連接、上傳文件、下載文件、列出目錄內(nèi)容、刪除文件等。 

連接FTP服務(wù)器

  • connect(String hostname, int port): 使用指定的主機(jī)名和端口號(hào)連接到FTP服務(wù)器。
  • connect(String hostname): 使用默認(rèn)端口(通常是21)連接到FTP服務(wù)器
  • login(String username, String password): 使用指定的用戶名和密碼登錄到FTP服務(wù)器。

文件上傳

  • storeFile(String remoteFileName, InputStream localFileStream):將本地文件流上傳到FTP服務(wù)器,并指定遠(yuǎn)程文件名。
  • appendFileStream(String remote): 以追加模式將本地文件上傳到FTP服務(wù)器。

文件下載

  • retrieveFile(String remoteFileName, OutputStream localFileStream):從FTP服務(wù)器下載文件,并將內(nèi)容寫入本地文件流。

目錄操作

  • changeWorkingDirectory(String pathname): 更改FTP服務(wù)器上的當(dāng)前工作目錄。
  • listDirectories(): 列出當(dāng)前工作目錄下的所有目錄。
  • listFiles(): 列出當(dāng)前工作目錄下的所有文件。

其他操作

  • disconnect(): 斷開與FTP服務(wù)器的連接。
  • logout(): 注銷FTP會(huì)話,通常在斷開連接之前調(diào)用。
  • completePendingCommand(): 完成當(dāng)前未完成的FTP命令的執(zhí)行。
  • allocate(int bytes): 為文件傳輸分配字節(jié)數(shù)組大小。
  • 這只是一部分FTPClient類提供的方法。具體的方法建議查閱Apache Commons Net庫的官方文檔或相關(guān)資源。

主動(dòng)模式和被動(dòng)模式在FTP協(xié)議中的主要區(qū)別在于數(shù)據(jù)連接的建立方式:

主動(dòng)模式(Active Mode):

  • 工作原理:客戶端在本地打開一個(gè)非特權(quán)端口(通常大于1023),并通過這個(gè)端口發(fā)送PORT命令給服務(wù)器,告訴服務(wù)器客戶端用于數(shù)據(jù)傳輸?shù)亩丝谔?hào)。然后,服務(wù)器使用其20端口(數(shù)據(jù)端口)主動(dòng)連接到客戶端指定的端口進(jìn)行數(shù)據(jù)傳輸。
  • 安全性:由于服務(wù)器需要主動(dòng)連接到客戶端的端口,這可能引發(fā)一些安全問題,特別是當(dāng)客戶端位于防火墻或NAT設(shè)備后面時(shí)。
  • 適用場景:適用于客戶端位于可以接受入站連接的網(wǎng)絡(luò)環(huán)境,且沒有防火墻或NAT設(shè)備限制的場景。

被動(dòng)模式(Passive Mode):

  • 工作原理:客戶端發(fā)送PASV命令給服務(wù)器,服務(wù)器在本地打開一個(gè)端口(通常是高位的非特權(quán)端口),并通過PASV命令的響應(yīng)告訴客戶端這個(gè)端口號(hào)。然后,客戶端主動(dòng)連接到服務(wù)器指定的這個(gè)端口進(jìn)行數(shù)據(jù)傳輸。
  • 安全性:由于客戶端主動(dòng)連接到服務(wù)器,這種模式更適合于客戶端位于防火墻或NAT設(shè)備后面的場景,因?yàn)檫@些設(shè)備通常允許出站連接但限制入站連接。
  • 適用場景: 特別適用于網(wǎng)絡(luò)環(huán)境不穩(wěn)定、存在防火墻或NAT設(shè)備的場景。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Web開發(fā)防止多用戶重復(fù)登錄的完美解決方案

    Java Web開發(fā)防止多用戶重復(fù)登錄的完美解決方案

    在web項(xiàng)目開發(fā)中,很多情況下都可以讓同一個(gè)賬號(hào)信息在不同的登錄入口登錄很多次,這樣子做的不是很完善。一般解決這種情況有兩種解決方案,小編呢主要以第二種方式給大家介紹具體的實(shí)現(xiàn)方法,對(duì)java web 防止多用戶重復(fù)登錄的解決方案感興趣的朋友一起看看吧
    2016-11-11
  • springboot的yml配置文件通過db2的方式整合mysql的教程

    springboot的yml配置文件通過db2的方式整合mysql的教程

    這篇文章主要介紹了springboot的yml配置文件通過db2的方式整合mysql的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot集成Nacos的實(shí)戰(zhàn)完全指南

    SpringBoot集成Nacos的實(shí)戰(zhàn)完全指南

    Nacos?作為阿里巴巴開源的一站式微服務(wù)管理平臺(tái),已成為?Spring?Cloud?Alibaba?生態(tài)的核心組件,本文基于?Spring?Boot?3.x?+?Nacos?2.x?最新版本,系統(tǒng)講解?Nacos?的安裝部署、配置中心、服務(wù)發(fā)現(xiàn)等核心功能,并提供生產(chǎn)級(jí)最佳實(shí)踐方案,有需要的小伙伴可以了解下
    2026-02-02
  • Java多線程 中斷機(jī)制及實(shí)例詳解

    Java多線程 中斷機(jī)制及實(shí)例詳解

    這篇文章主要介紹了Java多線程 中斷機(jī)制及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 關(guān)于aop切面 注解、參數(shù)如何獲取

    關(guān)于aop切面 注解、參數(shù)如何獲取

    這篇文章主要介紹了關(guān)于aop切面 注解、參數(shù)如何獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • IDEA集成Docker實(shí)現(xiàn)快捷部署的操作步驟

    IDEA集成Docker實(shí)現(xiàn)快捷部署的操作步驟

    這篇文章主要介紹了IDEA集成Docker實(shí)現(xiàn)快捷部署的操作步驟,通過靈活利用這一功能,開發(fā)人員可以更快速地開發(fā)、調(diào)試和部署應(yīng)用程序,從而提高開發(fā)工作的效率和質(zhì)量,需要的朋友可以參考下
    2024-06-06
  • Spring @ConditionalOnMissingBean 注解的主要作用解析

    Spring @ConditionalOnMissingBean 注解的主要作用解析

    @ConditionalOnMissingBean是Spring Boot中用于條件化配置的注解,確保只有在指定Bean不存在時(shí)才創(chuàng)建,它在自動(dòng)配置中廣泛應(yīng)用,提供默認(rèn)配置并允許用戶自定義Bean,本文給大家介紹Spring @ConditionalOnMissingBean注解的作用,感興趣的朋友一起看看吧
    2026-01-01
  • Java的位圖和布隆過濾器深入詳細(xì)講解

    Java的位圖和布隆過濾器深入詳細(xì)講解

    這篇文章主要介紹了Java的位圖和布隆過濾器,在學(xué)習(xí)之前的數(shù)據(jù)結(jié)構(gòu)的時(shí)候,我們使用的數(shù)據(jù)量都不是很大,但是在生活中,我們常常面臨著要處理大量數(shù)據(jù)結(jié)果并得出最終結(jié)果,那么有沒有什么數(shù)據(jù)結(jié)構(gòu)可以幫助我們實(shí)現(xiàn)這樣的功能呢,想要繼續(xù)了解的朋友可以參考下
    2024-10-10
  • Java集合排序規(guī)則接口Comparator用法解析

    Java集合排序規(guī)則接口Comparator用法解析

    這篇文章主要介紹了Java集合排序規(guī)則接口Comparator用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • IDEA中的Run/Debug Configurations各項(xiàng)解讀

    IDEA中的Run/Debug Configurations各項(xiàng)解讀

    這篇文章主要介紹了IDEA中的Run/Debug Configurations各項(xiàng)解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

怀安县| 阜阳市| 苏州市| 盱眙县| 长葛市| 页游| 四会市| 防城港市| 潼南县| 香格里拉县| 噶尔县| 噶尔县| 镶黄旗| 巧家县| 西乌| 湘潭县| 乌海市| 阳信县| 汉沽区| 浠水县| 安顺市| 武穴市| 邓州市| 长汀县| 奉节县| 通许县| 阳春市| 东兴市| 枣阳市| 淮北市| 诸暨市| 秦皇岛市| 周至县| 高邑县| 高陵县| 绍兴县| 抚宁县| 阳高县| 左贡县| 霍山县| 赫章县|