分布式文件系统:是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
分布式文件系统管理的文件,存储在 很多机器上。这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问。
client
Tracker cluster(跟踪服务器):
负责调度storage与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。
Storage cluster(存储服务器):
存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向tracker cluster
中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。
上传流程:
1 client通过tracker server查找可用的storage server.
2 tracker server向client返回一台可用的storage server的IP地址和端口号
3 client直接通过tracker server 返回的IP地址和端口与其中一台storage server建立连接并进行文件上传
4 上传完成,storage server返回client一个文件ID,文件上传结束。
下载流程:
1 client通过(storage server返回client一个文件ID)tracker server查找要下载文件所在的storage server
2 tracker server 向client返回包含指定文件的某个storage server的IP地址和端口号
3 client直接通过tracker server返回IP地址和端口与其中一台storage server建立连接并指定要下载文件。
4 下载文件成功。
fastDFS安装:https://blog.csdn.net/qq_31463999/article/details/82768466?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
配置文件位置
/etc/fdfs/
服务启动
service fdfs_trackerd start
service fdfs_storaged start
测试文件上传是否成功:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/qjs/fastDFS/client/timg.jpg
Nginx集成fastDFS模块
springboot集成fastdfs
1
com.github.tobato
fastdfs-client
1.26.1-RELEASE
2
@Configuration
@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
}
3
#fastDFS
fdfs:
so-timeout: 2500
connect-timeout: 600
thumb-image:
width: 60
height: 60
tracker-list:
- 192.168.0.103:22122
4
@RestController
@RequestMapping(“upload”)
public class UploadController {
@Autowired
private UploadService uploadService;
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private ThumbImageConfig thumbImageConfig;
/**
* 上传图片
* @param file
* @return
*/
@PostMapping("image")
public ResponseEntity<String> uploadImage(@RequestParam("file")MultipartFile file){
return ResponseEntity.ok(uploadService.uploadImage(file));
}
@PostMapping("fastDFSImage")
public ResponseEntity<String> uploadfastDFSImage(@RequestParam("file")MultipartFile file){
try {
//上传图片不带缩略图
//StorePath storePath=storageClient.uploadFile(new FileInputStream(file),);
//上传图片带缩略图
// String extension=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
String extension = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
StorePath storePath1 = storageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), extension, null);
//带分组的路径
System.out.println(storePath1.getFullPath());
//不带分组的路径
System.out.println(storePath1.getPath());
//获取缩略图路径
System.out.println(thumbImageConfig.getThumbImagePath(storePath1.getPath()));
return ResponseEntity.ok("http:192.168.0.103/"+storePath1.getFullPath());
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}