一、快速集成
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版本升级等注意事项进行了详细介绍。