FastDFS SpringBoot整合使用指南

FastDFS是一個開源的高性能分散式文件系統,主要解決了海量媒體文件存儲及訪問問題,它採用了一種特殊的兩層目錄結構,第一層目錄為組名(group),第二層目錄由用戶自行指定(如M00、M01等),文件名則隨意指定。SpringBoot是一個快速開發的Java EE微服務框架,它提供了豐富的插件機制,開發者只需要配置簡單的參數,就可以便捷地與各種中間件快速集成,進而實現更高效的開發與部署。本文主要介紹如何使用FastDFS SpringBoot Starter將FastDFS文件系統集成到SpringBoot應用中,實現文件上傳、下載、刪除等操作。

一、快速集成

1、 在SpringBoot項目中加入fastdfs-spring-boot-starter依賴,Maven如下:

<dependency>
     <groupId>com.github.tobato</groupId>
     <artifactId>fastdfs-client-java-spring-boot-starter</artifactId>
     <version>2.0.2</version>
</dependency>

2、 配置application.yml文件,增加FastDFS相關配置參數,如下所示:

spring:
  proiles: dev
# FastDFS相關參數配置
fdfs:
# FastDFS伺服器地址
  tracker-list: 192.168.0.109:22122
  connect-timeout: 5000
  network-timeout: 30000
  charset: UTF-8
  http:
    anti-steal-token: false
    secret-key:
  pool:
    max-total: 1000
    max-idle: 100
    min-idle: 10
    max-wait-millis: 5000

以上配置分別指定了FastDFS伺服器地址、連接超時、網路超時、字符集、HTTP相關參數和連接池相關參數等。

二、文件上傳

1、 在Controller層中注入FastFileStorageClient介面;

@RestController
@RequestMapping("/file")
public class FileUploadController {

    @Autowired
    private FastFileStorageClient storageClient;

    @PostMapping(value = "/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);
        return storePath.getFullPath();
    }
}

2、 上述代碼中,MultipartFile為Spring MVC框架中的文件上傳對象,通過構造InputStream、文件大小和文件後綴名等參數,調用FastFileStorageClient的uploadFile方法即可將文件上傳到指定的FastDFS伺服器上,方法返回值StorePath即為上傳後的文件路徑及文件名等信息,其中,getFullPath方法返回完整的文件路徑信息。

三、文件下載

1、 在Controller層中注入DownloadByteArray介面;

@RestController
@RequestMapping("/file")
public class FileDownloadController {

    @Autowired
    private DownloadByteArray downloadService;

    @GetMapping(value = "/download/{path}")
    public ResponseEntity&lt;byte[]&gt; downloadFile(@PathVariable("path") String path) throws IOException {
        byte[] content = downloadService.download(path);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDisposition(ContentDisposition.builder("attachment").filename(FilenameUtils.getName(path)).build());
        return new ResponseEntity&lt;&gt;(content, headers, HttpStatus.OK);
    }
}

2、 上述代碼中,DownloadByteArray為FastDFS提供的下載文件服務介面,調用download方法即可獲取相應的文件內容;headers.setContentType指定內容類型為二進位流,headers.setContentDisposition指定輸出文件名及下載方式為附件形式,最終使用ResponseEntity將文件內容、header參數和狀態信息進行包裝後返回。

四、文件刪除

1、 在Controller層中注入FastFileStorageClient介面;

@RestController
@RequestMapping("/file")
public class FileDeleteController {

    @Autowired
    private FastFileStorageClient storageClient;

    @DeleteMapping(value = "/delete/{path}")
    public String deleteFile(@PathVariable("path") String path) {
        storageClient.deleteFile(path);
        return "success";
    }
}

2、 上述代碼中,FastFileStorageClient提供的deleteFile方法可以實現快速刪除指定的FastDFS文件,刪除成功後返回success表示刪除成功。

五、注意事項

1、 關於存儲路徑

StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);

以上代碼會返回一個StorePath對象,其中getStorePath()和getFullPath()是不同的。getStorePath()方法只返回後綴,而getFullPath()方法會返回完整的相對路徑+文件名,如:group1/M00/00/00/wKgA71iLY1SAXMdhAAKq-VYtE_8629.jpg

2、FastDFS文件名大小限制

FastDFS文件名大小限制為128個位元組,在調用上傳服務時,應該確保文件名不超過該長度,可以通過FilenameUtils.getName(path)方法從文件完整路徑中提取文件名,然後使用substring()等方法截取小於128個位元組的子串,作為文件名。

3、fastdfs-spring-boot-starter的版本與升級

fastdfs-spring-boot-starter的版本與fastdfs-client-java的版本是有依賴關係的,一般需保證二者版本相同。

六、總結

FastDFS SpringBoot Starter提供了一種快速集成FastDFS分散式文件系統的方式,方便開發者能夠便捷地使用FastDFS提供的豐富特性。本文介紹了如何使用FastDFS SpringBoot Starter實現SpringBoot文件的上傳、下載和刪除等操作,並對存儲路徑、FastDFS文件名大小限制和fastdfs-spring-boot-starter版本升級等注意事項進行了詳細介紹。

原創文章,作者:RICI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/145838.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RICI的頭像RICI
上一篇 2024-10-29 18:58
下一篇 2024-10-29 18:58

相關推薦

  • wzftp的介紹與使用指南

    如果你需要進行FTP相關的文件傳輸操作,那麼wzftp是一個非常優秀的選擇。本文將從詳細介紹wzftp的特點和功能入手,幫助你更好地使用wzftp進行文件傳輸。 一、簡介 wzft…

    編程 2025-04-29
  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起著至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • Fixmeit Client 介紹及使用指南

    Fixmeit Client 是一款全能的編程開發工具,該工具可以根據不同的編程語言和需求幫助開發人員檢查代碼並且提供錯誤提示和建議性意見,方便快捷的幫助開發人員在開發過程中提高代…

    編程 2025-04-29
  • Open h264 slic使用指南

    本文將從多個方面對Open h264 slic進行詳細闡述,包括使用方法、優缺點、常見問題等。Open h264 slic是一款基於H264視頻編碼標準的開源視頻編碼器,提供了快速…

    編程 2025-04-28
  • mvpautocodeplus使用指南

    該指南將介紹如何使用mvpautocodeplus快速開發MVP架構的Android應用程序,並提供該工具的代碼示例。 一、安裝mvpautocodeplus 要使用mvpauto…

    編程 2025-04-28
  • Python mmap共享使用指南

    Python的mmap模塊提供了一種將文件映射到內存中的方法,從而可以更快地進行文件和內存之間的讀寫操作。本文將以Python mmap共享為中心,從多個方面對其進行詳細的闡述和講…

    編程 2025-04-27
  • Python隨機函數random的使用指南

    本文將從多個方面對Python隨機函數random做詳細闡述,幫助讀者更好地了解和使用該函數。 一、生成隨機數 random函數生成隨機數是其最常見的用法。通過在調用random函…

    編程 2025-04-27
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • RabbitMQ Server 3.8.0使用指南

    RabbitMQ Server 3.8.0是一個開源的消息隊列軟體,官方網站為https://www.rabbitmq.com,本文將為你講解如何使用RabbitMQ Server…

    編程 2025-04-27
  • 按鍵精靈Python插件使用指南

    本篇文章將從安裝、基礎語法使用、實戰案例以及常用問題四個方面介紹按鍵精靈Python插件的使用方法。 一、安裝 安裝按鍵精靈Python插件非常簡單,只需在cmd命令行中輸入以下代…

    編程 2025-04-27

發表回復

登錄後才能評論