做过很多项目在图片上传上一直使用的是FastDFS,刚开始得知搭建一个这样的系统非常复杂,所以直接使用了淘淘商城的虚拟机。在后面的项目中,最终选择在在阿里云上自己搭建一个FastDFS+Nginx分布式文件服务器。文章可参考Centos7 安装FastDFS+nginx module
现在考虑到后期服务器可能要变更,重新搭建太耗时,并且现在服务器安装的东西太多准备重装一下CentOS系统,所以最近把很多东西都用Docker重新搭建了一下。
本文重点教给大家使用Docker一键搭建FastDFS+Nginx分布式文件服务器,具体搭建过程太复杂,希望以后有时间可以总结一下,大部分坑都在docker使用上不熟练和docker中的centos环境太少,甚至没有基础的vim、ll、yum等。不过考虑到系统的精简性,最终并没有将这些环境加入进去。

拉取镜像并启动

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

其中-v ${HOME}/fastdfs:/var/local/fdfs是指:将${HOME}/fastdfs这个目录挂载到容器里的/var/local/fdfs这个目录里。所以上传的文件将被持久化到${HOME}/fastdfs/storage/data里,IP 后面是自己的服务器公网ip或者虚拟机ip,-e WEB_PORT=80 指定nginx端口

测试

docker exec -it fastdfs /bin/bash

echo "Hello FastDFS!">index.html

fdfs_test /etc/fdfs/client.conf upload index.html

在这里插入图片描述
在这里插入图片描述
可以访问说明FastDFS就搭建好了。
如果有问题可以看一下是否占用80端口或是否开启22122 23000端口

FastDFS整合SpringBoot

首先加上依赖

		<dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
        </dependency>

配置yml文件

# 分布式文件系统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:
   - 47.95.234.255:22122
 #
 # 存储服务器storage_server访问地址
 web-server-url: http://47.95.234.255/
 spring:
   http:
     multipart:
       max-file-size: 100MB # 最大支持文件大小
       max-request-size: 100MB # 最大支持请求大小

测试类

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());
    }
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐