FastDFS初学

在这里插入图片描述

FastDFS是分布式文件系统。使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

组成部分

1、tracker(调度服务器)作用:负载均衡和调度
2、storage(存储服务器) 作用:文件存储

工作原理

1、FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

2、Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。

3、Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage server 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

FastDFS上传下载流程

1、上传流程:
在这里插入图片描述

  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,文件上传结束。

2、下载流程:
在这里插入图片描述

  1. Client通过Tracker server查找要下载文件所在的的Storage server。
  2. Tracker server向Client返回包含指定文件的某个Storage server的IP地址和端口号。
  3. Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并指定要下载文件。
  4. 下载文件成功。

安装

1、下载压缩包
在这里插入图片描述

2、使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用)

docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker

3、 使用docker镜像构建storage容器(存储服务器,提供容量和备份服务)

docker run -dti  --network=host --name storage -e TRACKER_SERVER=192.168.253.100:22122 -v /var/fdfs/storage:/var/fdfs  -v /etc/localtime:/etc/localtime  delron/fastdfs storage

5、测试,进入storage容器,进入/var/fdfs目录

docker exec -it storage bash
cd /var/fdfs

6、添加测试文件

echo hello 这是一个测试用例>a.txt
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt

和java进行对接

1、导入依赖

   <!-- fastDFS分布式文件存储 -->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.27.2</version>
        </dependency>

2、配置启动类

@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
@SpringBootApplication
public class JwtDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(JwtDemoApplication.class, args);
    }
}

3、编写控制层

@PostMapping("/create")
    public ImgResult create(@RequestBody MultipartFile file){
        return uploadService.create(file);
    }
 @DeleteMapping("/delete")
    public boolean delete(String url){
        return uploadService.delete(url);
    }

4、编写业务层

@Service
@Log4j2
public class UploadService {
    @Autowired
    FastFileStorageClient fastFileStorageClient;
    @Autowired
    private ThumbImageConfig thumbImageConfig;
    @Value("${fdfs.view-base-url}")
    private String basePath;
    //读取缩略图
    public ImgResult create(MultipartFile file) {
        // 获取文件后缀名
        String suffix = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
        //上传
        StorePath storePath = null;
        InputStream is = null;
        try {
            is = file.getInputStream();
            storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(is, file.getSize(), suffix, null);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        log.info("正常图片路径:{}",storePath.getFullPath());
        log.info("缩略图片路径:{}",thumbImageConfig.getThumbImagePath(storePath.getFullPath()));
        return new ImgResult().setErrno(0).setData(new Image().setUrl(basePath +"/"+storePath.getFullPath()));
    }
    
     public boolean delete(String url) {
        try {
            fastFileStorageClient.deleteFile(url);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

5、开放防火墙端口

 firewall-cmd --zone=public --add-port=22122/tcp --permanent
 firewall-cmd --zone=public --add-port=23000/tcp --permanent
 firewall-cmd --reload

6、输出结果

2023-05-10 16:29:01.034  INFO 17204 --- [io-8080-exec-10] edu.xja.service.UploadService            : 正常图片路径:group1/M00/00/00/wKj9ZGQyo02AZK4CAAa_OBFgvWI494.jpg
2023-05-10 16:29:01.034  INFO 17204 --- [io-8080-exec-10] edu.xja.service.UploadService            : 缩略图片路径:group1/M00/00/00/wKj9ZGQyo02AZK4CAAa_OBFgvWI494_60x60.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值