springboot整合fastdfs
fastdfs介绍
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
springboot整合fastdfs
fastdfs的安装网上教程很多,可以参考,也可以直接去官网查看,这里只重点记录springboot如何整合fastdfs,以及一些具体的使用。
集成
-
pom添加依赖,该版本截止当前日期最新,功能比较全面
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.5</version> </dependency>
-
在springboot启动类添加如下,用于解决在SpringBoot项目当中JMX重复注册的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
-
application.properties添加如下
fdfs.so-timeout=1501 fdfs.connect-timeout=601 fdfs.thumb-image.width=150 fdfs.thumb-image.height=150 fdfs.web-server-url=ip:port/ fdfs.tracker-list[0]=ip:port/
代码编写
上面我们引入的依赖已经帮我封装好了一个操作bean,我们直接注入即可使用,非常方便。
@Autowired
private FastFileStorageClient storageClient;
对于普通文件与图片文件的上传我们应该区分开来,图片文件我们可以直接生成缩略图,这在一些应用中是非常有必要的。
@ApiOperation("上传除图片外的其他文件")
@PostMapping
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
Set<MetaData> metaDataSet = new HashSet<>();
metaDataSet.add(new MetaData("Author", "Author"));
metaDataSet.add(new MetaData("date", "当前时间"));
StorePath path = storageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),
metaDataSet);
return path.getFullPath();
}
@ApiOperation("上传图片文件")
@PostMapping("img")
public String uploadImageAndCrtThumbImage(@RequestParam("file") MultipartFile file) throws IOException {
Set<MetaData> metaDataSet = new HashSet<>();
metaDataSet.add(new MetaData("Author", "Author"));
metaDataSet.add(new MetaData("date", "当前时间"));
StorePath path = storageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),
metaDataSet);
return path.getFullPath();
}
缩略图会根据application.properties中的配置比例自动生成,当然也可以根据业务手动设置比例进行生成,具体可以看下源码中的实现。