引言

安装过Fastdfs的朋友都知道,过程是非常复杂,有一个步骤错了,可能就要重头来过,最近我在做毕业设计,就想着能不能用docker搭建一个Fastdfs,学过docker不用岂不是浪费了,最后还是安装好了,而且过程非常简单,下面我来分享一下我的安装过程。

安装步骤

  1. 首先拉取最新版的fastdfs镜像
docker pull delron/fastdfs
  1. 下载完成后,先创建一下本地的映射目录,方便我们查看日志等信息
cd /
mkdir fastdfs
cd /fastdfs
mkdir tracker 
mkdir storage
  • Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。
  • Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息
  1. 安装tracker
docker run -di --network=host --name=tracker -v /fastdfs/tracker/:/var/fdfs delron/fastdfs tracker

在这里插入图片描述
4. 安装storage,这里的ip需要换成你自己的

docker run -di --network=host --name storage -e TRACKER_SERVER=ip:22122 -v /fastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

之后可以使用==docker ps==命令查看是否安装好了
在这里插入图片描述
5. 现在就已经安装好了,可以测试上传了,如果不放心的话,可进去storage里看一下

docker exec -it storage /bin/bash

可以先看下nginx的配置文件

cd /usr/local/nginx/conf
vim nginx.conf

在这里插入图片描述
可以看到fastdfs模块已经配置好了,再看看storage的配置文件

cd /etc/fdfs
vim storage.conf

在这里插入图片描述
默认访问端口是8888
6. 测试
将一张图片放到/fastdfs/storage的目录下,进入storage的命令行,执行下面命令

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg

上传成功后,下面会返回一个路劲,在浏览器可以通过ip:8888/路径来访问你上传的图片了

使用Java上传图片

这里是Spring Boot应用程序

  1. 引入依赖
<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.26.7</version>
 </dependency>
  1. 编写配置文件,ip填写自己的
fdfs:
  connect-timeout: 601
  so-timeout: 1500
  thumb-image:
    height: 60
    width: 60
  tracker-list:
    - ip:22122
  1. 编写测试类上传
@SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest {

    @Autowired
    private FastFileStorageClient storageClient;

    @Autowired
    private ThumbImageConfig thumbImageConfig;

    @Test
    public void testUpload() throws FileNotFoundException {
        // 要上传的文件
        File file = new File("C:\\Users\\14759\\Pictures\\壁纸\\猫2.jpg");
        // 上传并保存图片,参数:1-上传的文件流 2-文件的大小 3-文件的后缀 4-可以不管他
        StorePath storePath = this.storageClient.uploadFile(
                new FileInputStream(file), file.length(), "jpg", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
    }

    @Test
    public void testUploadAndCreateThumb() throws FileNotFoundException {
        File file = new File("C:\\Users\\14759\\Pictures\\壁纸\\猫2.jpg");
        // 上传并且生成缩略图
        StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
                new FileInputStream(file), file.length(), "png", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
        // 获取缩略图路径
        String path = thumbImageConfig.getThumbImagePath(storePath.getPath());
        System.out.println(path);
    }
}

完成后会在控制台打印路径,通过浏览器访问==ip:端口/路径==就好了

Q.E.D.


愿你编码半生,归来仍是少年