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<byte[]> 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<>(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-hant/n/145838.html