使用Docker搭建图片服务器并连接使用

使用Docker搭建图片服务器并连接使用

一. 安装Docker

二. 安装Fastdfs文件服务器+Nginx

2.1 Fastdfs

  • FastDFS 是用 c 语言编写的一款开源的分布式文件系统。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 称为存储服务器
  • 服务端两个角色:
    • Tracker: 管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
    • Storage: 实际保存文件, Storage 分为多个组,每个组之间保存的文件是不同的。每 个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有 主从的概念。

2.2 Fastdfs安装步骤

  • 输入命令:
    docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=47.95.234.255 -e WEB_PORT=80 -v ${
          
          HOME}/fastdfs:/var/local/fdfs registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
    

    将 47.95.234.255 切换为你自己的ip,并开放 8098、22122、23000端口号

  • 测试:
    docker exec -it fastdfs /bin/bash
    echo "Hello FastDFS!">index.html
    fdfs_test /etc/fdfs/client.conf upload index.html
    

    此处是创建一个文件内容为Hello FastDFS! 的新建文件: index.html,然后上传至fastdfs服务器,

  • 返回结果如图:
    在这里插入图片描述
  • 浏览器中访问,若出现如下内容则说明配置成功:
    在这里插入图片描述

如果有问题可以看一下是否占用80端口或是否开启22122 23000端口

三. Java中配置项目并连接

3.1 实战步骤

  1. 在pom.xml中引入fastdfs的相关依赖:

            <dependency>
                <groupId>com.github.tobato</groupId>
                <artifactId>fastdfs-client</artifactId>
                <version>1.26.7</version>
            </dependency>
    
  2. 在application.yml中配置fastdfs的相关配置:

    # 分布式文件系统fastdfs配置
    fdfs:
      # socket连接超时时长
      soTimeout: 1500
      # 连接tracker服务器超时时长
      connectTimeout: 600
      pool:
        # 从池中借出的对象的最大数目
        max-total: 153
        # 获取连接时的最大等待毫秒数100
        max-wait-millis: 102
      # 缩略图生成参数,可选
      thumbImage:
        width: 150
        height: 150
      # 跟踪服务器tracker_server请求地址,支持多个,这里只有一个,如果有多个在下方加- x.x.x.x:port
      trackerList:
        - 你的fastdfs的ip地址:22122     # 如 :- 42.192.25.33:22122
      # 存储服务器storage_server访问地址
      web-server-url: http://你的fastdfs的ip地址/
      spring:
        http:
          multipart:
            max-file-size: 100MB # 最大支持文件大小
            max-request-size: 100MB # 最大支持请求大小
    
  3. 测试代码

    // CSDN-暗余
    public class FdfsTest {
          
          
    
        @Autowired
        private FastFileStorageClient storageClient;
    
    
        @Test
        public void testUpload() throws FileNotFoundException {
          
          
            File file = new File("G:\\img.png");
            // 上传并且生成缩略图
            StorePath storePath = this.storageClient.uploadFile(
                    new FileInputStream(file), file.length(), "png", null);
            // 带分组的路径
            System.out.println(storePath.getFullPath());
            // 不带分组的路径
            System.out.println(storePath.getPath());
        }
    
        @Test
        public void testUploadAndCreateThumb() throws FileNotFoundException {
          
          
            File file = new File("G:\\img.png");
            // 上传并且生成缩略图
            StorePath storePath = this.storageClient.uploadFile(
                    new FileInputStream(file), file.length(), "png", null);
            // 带分组的路径
            System.out.println(storePath.getFullPath());
            // 不带分组的路径
            System.out.println(storePath.getPath());
        }
    }
    
  4. 一般上传文件的方法如图:

    import com.github.tobato.fastdfs.service.FastFileStorageClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.ObjectUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    @Service
    public class FdfsServiceImpl {
          
          
    
    
        @Autowired
        private FastFileStorageClient storageClient;
    
        /**
         * 上传文件 CSDN-暗余
         * @param file 上传的文件
         * @return url 可访问的url路径
         */
        public String upload(MultipartFile file) {
          
          
            String originalFilename = file.getOriginalFilename();
            if (!ObjectUtils.isEmpty(originalFilename)) {
          
          
                String[] split = originalFilename.split("\\.");
                try {
          
          
                    return "http://42.192.25.33/" +
                            storageClient.uploadFile(file.getInputStream(), file.getSize(), split.length > 0 ? split[split.length - 1] : "", null)
                                    .getFullPath();
                }catch (Exception e){
          
          
                    e.printStackTrace();
                }
            }
            // 为空或者异常,直接返回空字符串
            return "";
        }
    }
    

    步骤4代码为核心实现,省略了Controller层,看明白的可复制稍微改动即可在此基础上复用。

猜你喜欢

转载自blog.csdn.net/qq_37128049/article/details/112293529
今日推荐