SpringCloud引入FastDFS的基本使用

SpringCloud引入FastDFS

概述:

​ 分布式文件系统 (Distributed File System) 是一个软件/软件服务器,这个软件可以用来管理文件。但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。

​ FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源。

​ FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。

​ FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

架构:

1>客户端通常指我们的程序,比如我们的Java程序去连接操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问。

2>服务端又由两个部分构成,一个是跟踪器(tracker),一个是存储节点(storage):

​ 1)**跟踪器(tracker)**主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是客户端和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker Server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。

​ 2)**存储节点(storage)**用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等。

Docker安装FastDFS

  1. 拉取镜像:

    docker pull delron/fastdfs
    
  2. 构建tracker:

    docker run -d --name tracker --network=host -v /mydata/fastdfs/tracker:/var/fdfs delron/fastdfs tracker
    #tracker服务默认的端口为22122,-v 实现了tracker容器的/var/fdfs目录和本地目录/mydata/fastdfs/tracker的挂载。
    
  3. 开放22122端口

    firewall-cmd --zone=public --add-port=22122/tcp --permanent
    
  4. 重新加载防火墙

    firewall-cmd --reload
    
  5. 构建storage

    docker run -d --name storage --network=host -e TRACKER_SERVER=虚拟机ip:22122 -v /mydata/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
    #storage服务默认的端口为23000,TRACKER_SERVER值为tracker服务的ip和端口,目的是将storage注册到tracker;-v 实现了storage容器的/var/fdfs目录和本地目录/mydata/fastdfs/storage的挂载;GROUP_NAME指定storage的组名为group1。
    
  6. 开发23000端口

    firewall-cmd --zone=public --add-port=23000/tcp --permanent
    firewall-cmd --reload
    
  7. 修改nginx端口

    #1.进入storage容器:
    docker exec -it storage bash
    
    #2.进入/etc/fdfs目录:
    cd /etc/fdfs
    
    #3.修改配置文件storage.conf,将storage监听nginx的端口8888改为83:
    vi storage.conf http.server_port=8888 --> http.server_port=83
    
    #4.进入/usr/local/nginx/conf目录:
    cd /usr/local/nginx/conf
    
    #5.修改nginx的配置文件nginx.conf,将nginx的端口由8888改为83:
    vi nginx.conf
    
    #6.开放83端口:
    exit
    firewall-cmd --zone=public --add-port=83/tcp --permanent
    firewall-cmd --reload
    
    #7.重启tracker容器和storage容器:
    docker restart tracker
    docker restart storage
    

使用:

第一步:

​ 引入依赖:

        <!--fastDFS的依赖-->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
        </dependency>

第二步:

​ 配置文件:

#-------------------------fastDfs的配置----------------------------------
#读取超时时长
fdfs.so-timeout=1501
#连接超时时长
fdfs.connect-timeout=601
#fastDfs的tracker服务的url地址(fastDfs是通过tracker找到存储节点storage的)
fdfs.tracker-list[0]=linux的ip:22122 
#fastDfs配置的nginx的url地址(fastDfs访问上传成功的文件是通过其配置的nginx),自定义的配置,不是fastDfs的官方配置
resources.url=http://linux的ip:83/

第三步:

​ 使用:

//1.注入fastDfs客户端(用于操作文件系统fastDfs)
	@Autowired
    private FastFileStorageClient fastFileStorageClient;
//2.将配置文件resources.url属性值注入给控制器host属性,其值为fastDfs;配置的nginx的url地址(fastDfs访问上传成功的文件是通过其配置的nginx)
	@Value("${resources.url}")
    private String host;

//3.controller层的方法的形参为MultipartFile对象;该对象封装了上传的文件的参数;该controller的返回值可为strng类型的数据,封装存入的文件的访问路径

//这里上传的文件为图片,
@PostMapping("/admin/file/upload/element")
    public ResponseEntity<String> uploadFile(MultipartFile file){

        //获取文件名
        String filename = file.getOriginalFilename();
        //获取文件后缀
        String suffix = FileUtil.getSuffix(filename);

        StorePath storePath = null;
        try {
            /*
              上传文件:
              调用FastFileStorageClient的uploadFile()方法,参数一上传的文件的字节数据,
              参数二上传的文件大小,参数三上传的文件的后缀,参数四给个HashSet,返回值为文件
              上传到文件系统fastDfs的存储节点storage的位置路径 --
              group1/M00/00/00/wKgJgGL302KABstMAAAAD00Jl2M283.jpg
             */
            storePath = fastFileStorageClient.uploadFile(file.getInputStream(), 
file.getSize(), suffix, new HashSet<>());
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*
          生成上传成功的文件的访问路径(fastDfs配置的nginx的访问地址+文件上传到文件系统
          fastDfs的存储节点storage的位置路径)
         */
        String realPath = host + storePath.getFullPath();

        //返回文件上传到文件系统fastDfs的访问路径
        return ResponseEntity.ok(realPath);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值