亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot集成FTP文件服務器簡單應用方式

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

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

環(huán)境

將Apache commont-net依賴放到pom.xml文件當中

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

簡單示例

一個簡單的參數(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 {

	/**
	 * 服務器地址
	 */
	private String host;

	/**
	 * 服務器端口
	 */
	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

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

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

		// 設置被動模式
		ftpClient.enterLocalPassiveMode();

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

		/**
		 * 上傳文件到FTP服務器
		 */
		// 將字符串轉成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服務器失?。。?!");
		}
		// 關閉流,釋放資源
		inputStream.close();
		// 如果FTP處于連接狀態(tài),則關閉連接和登錄
		if (ftpClient.isConnected()) {
			ftpClient.logout();
			ftpClient.disconnect();
		}
	}
}

FTPClient類方法簡單介紹

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

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

連接FTP服務器

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

文件上傳

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

文件下載

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

目錄操作

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

其他操作

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

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

主動模式(Active Mode):

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

被動模式(Passive Mode):

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

總結

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

相關文章

  • java中l(wèi)ist使用時需避免的場景總結

    java中l(wèi)ist使用時需避免的場景總結

    眾所周知,Java為開發(fā)者提供了多種集合類的實現(xiàn),其中幾乎所有業(yè)務代碼都需要用到List,但List的錯誤使用也會導致諸多問題,所以本文我們就來看一看幾個錯誤使用List的場景吧
    2023-10-10
  • Java面試題沖刺第十六天--消息隊列

    Java面試題沖刺第十六天--消息隊列

    這篇文章主要為大家分享了最有價值的三道關于消息隊列的面試題,涵蓋內容全面,包括數(shù)據(jù)結構和算法相關的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java中數(shù)組越界異常的優(yōu)雅解決方式

    Java中數(shù)組越界異常的優(yōu)雅解決方式

    ?數(shù)組越界報錯通常發(fā)生在嘗試訪問數(shù)組中不存在的索引時,這可能導致程序崩潰或異常,這篇文章主要給大家介紹了關于Java中數(shù)組越界異常的優(yōu)雅解決方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • Java 利用binarySearch實現(xiàn)抽獎計算邏輯

    Java 利用binarySearch實現(xiàn)抽獎計算邏輯

    這篇文章主要介紹了Java 利用binarySearch實現(xiàn)抽獎計算邏輯,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • struts2實現(xiàn)文件上傳顯示進度條效果

    struts2實現(xiàn)文件上傳顯示進度條效果

    這篇文章主要為大家詳細介紹了struts2實現(xiàn)文件上傳顯示進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java讀取數(shù)據(jù)庫表的示例代碼

    Java讀取數(shù)據(jù)庫表的示例代碼

    這篇文章主要介紹了Java讀取數(shù)據(jù)庫表,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • SpringBoot使用ResponseBodyEmitter處理流式日志和進度條

    SpringBoot使用ResponseBodyEmitter處理流式日志和進度條

    這篇文章主要為大家詳細介紹了SpringBoot如何使用ResponseBodyEmitter處理流式日志和進度條,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • java中進程與線程_三種實現(xiàn)方式總結(必看篇)

    java中進程與線程_三種實現(xiàn)方式總結(必看篇)

    下面小編就為大家?guī)硪黄猨ava中進程與線程_三種實現(xiàn)方式總結(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • SpringBoot?Security從入門到實戰(zhàn)示例教程

    SpringBoot?Security從入門到實戰(zhàn)示例教程

    Spring?Security是一個功能強大且高度可定制的身份驗證和訪問控制框架,接下來通過本文給大家介紹SpringBoot?Security從入門到實戰(zhàn)示例教程,感興趣的朋友一起看看吧
    2022-05-05
  • Spring中的AutowireCandidateResolver的具體使用詳解

    Spring中的AutowireCandidateResolver的具體使用詳解

    這篇文章主要介紹了Spring中的AutowireCandidateResolver的具體使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04

最新評論