FastDFS是一个开源的分布式文件系统,它进行文件储存,访问,同步等文件管理操作,解决了大容量储存和负载均衡的问题,适合以文件为载体的服务,例如视频网站,相册网站。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过Tracker server 调度最终由 Storage server 完成文件上传和下载。Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storageserver 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
创建一个 fastdfs模块
pom文件如下:
<!-- 继承Spring boot工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--fastdfs-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.5</version>
</dependency>
</dependencies>
fast_dfs.properties文件
fdfs.soTimeout=1500 # socket连接超时时长
fdfs.connectTimeout=600 # 连接tracker服务器超时时长
fdfs.trackerList=81.68.176.148:22122 # 填你自己的ip
fileServerUrl=http://81.68.176.148/ #拼接地址用的
引导类
@Configuration
@PropertySource("fast_dfs.properties")
@Import(FdfsClientConfig.class) // 导入FastDFS-Client组件
public class FdfsConfiguration {
}
封装fastfds客户端
@Component
public class FastDFSClientUtil {
@Autowired
private FastFileStorageClient storageClient;
// 上传
public String uploadFile(MultipartFile file) throws IOException {
StorePath storePath = storageClient.uploadFile((InputStream) file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);
return storePath.getFullPath();
}
// 删除
public void delFile(String filePath) {
storageClient.deleteFile(filePath);
}
// 下载
public byte[] download(String groupName, String path) throws IOException {
InputStream ins = storageClient.downloadFile(groupName, path, new DownloadCallback<InputStream>() {
@Override
public InputStream recv(InputStream ins) throws IOException {
// 将此ins返回给上面的ins
return ins;
}
});
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = ins.read(buff, 0, 100)) > 0) {
byteArrayOutputStream.write(buff, 0, rc);
}
return byteArrayOutputStream.toByteArray();
}
}
下面用psotman来测试一下
先启动引导类
再打开postman,选form-data,然后key选file类型,再填写file,跟controller里的类型一样,然后点击selectfiles选择上传图片。
点击提交,成功的话,左下角就会提示出你提交图片的地址,你把这个地址粘贴到浏览器就可以进行访问你这个提交到fastfds里的图片。