fastDFS使用

分布式文件系统:是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
分布式文件系统管理的文件,存储在 很多机器上。这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问。

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;
}

}

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页