FastDFS Docker

Docker 安装 FastDFS

Posted on 2020-11-20,5 min read
  1. 安装 fastdfs 必要组件 tracker 什么都不用改
docker run -d --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker 
  1. 安装 fastdfs 存储地址 storage 除了 ip 其他的都不用改
docker run -d --network=host --name storage -e TRACKER_SERVER=你服务器自己的ip:22122 -v /var/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage 
  1. 进入容器修改配置 一定要,要不然链接不上
docker exec -it tracker bash 
  1. 修改配置
vi /etc/fdfs/client.conf 

将配置 tracker_server = 你自己的 ip:22122

到这其实 fastDFS 就配好了

5.创建项目测试

命令行测试

 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf  lk.log

我这里用的是 springBoot 进行整合。swagger-ui 进行图片上传

​ 5.1.pom 依赖

<!-- FastDFS依赖 -->
<dependency>
    <groupId>com.github.tobato</groupId>
     <artifactId>fastdfs-client</artifactId>
    <version>1.26.5</version>
</dependency>
<!-- Swagger2 核心依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>

​ 5.2配置 yml 需要修改 ip

  spring:
    servlet:
      multipart:
        max-file-size: 100MB # 最大支持文件大小
        max-request-size: 100MB # 最大支持请求大小
  # 分布式文件系统FDFS配置
  fdfs:
    # 链接超时
    connect-timeout: 600
    # 读取时间
    so-timeout: 600
    # 生成缩略图参数
    thumb-image:
      width: 150
      height: 150
    tracker-list: 你自己的ip:22122

​ 5.3配置文件(两个)

SwaggerConfig.java 一定要改成你自己项目的 controller 包路径,这里会扫描你的接口

  @Configuration
  public class SwaggerConfig {
      @Bean
      public Docket createRestApi() {
          return new Docket(DocumentationType.SWAGGER_2)
                  .apiInfo(apiInfo())
                  .select()
                  .apis(RequestHandlerSelectors.basePackage("top.mail.email.controller"))
                  .paths(PathSelectors.any())
                  .build();
      }
      private ApiInfo apiInfo() {
          return new ApiInfoBuilder()
                  .title("SpringBoot利用Swagger构建API文档")
                  .description("使用RestFul风格, 创建人:知了一笑")
                  .termsOfServiceUrl("https://github.com/cicadasmile")
                  .version("version 1.0")
                  .build();
      }
  }

DfsConfig.java

@Configuration
@Import(FdfsClientConfig.class)
// Jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class DfsConfig {
}

​ 5.4.工具类

FileDfsUtil.java

  @Component
  public class FileDfsUtil {
      private static final Logger LOGGER = LoggerFactory.getLogger(FileDfsUtil.class);
      @Resource
      private FastFileStorageClient storageClient ;
      /**
       * 上传文件
       */
      public String upload(MultipartFile file) throws Exception{
          StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);
          return storePath.getFullPath() ;
      }
      /**
       * 删除文件
       */
      public void deleteFile(String fileUrl) {
          if (StringUtils.isEmpty(fileUrl)) {
              LOGGER.info("fileUrl == >>文件路径为空...");
              return;
          }
          try {
              StorePath storePath = StorePath.parseFromUrl(fileUrl);
              storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
          } catch (Exception e) {
              LOGGER.info(e.getMessage());
          }
      }
  }

​ 5.5.controller 接口

FileController.java

@RestController
public class FileController {
     @Resource
     private FileDfsUtil fileDfsUtil ;
     /**
      * 文件上传
      */
     @ApiOperation(value="上传文件", notes="测试FastDFS文件上传")
     @RequestMapping(value = "/uploadFile",headers="content-type=multipart/form-data", method = RequestMethod.POST)
     public ResponseEntity<String> uploadFile (@RequestParam("file") MultipartFile file){
         String result ;
         try{
             String path = fileDfsUtil.upload(file) ;
             if (!StringUtils.isEmpty(path)){
                 result = path ;
             } else {
                result = "上传失败" ;
             }
         } catch (Exception e){
             e.printStackTrace() ;
             result = "服务异常" ;
         }
         return ResponseEntity.ok(result);
     }
     /**
      * 文件删除
      */
     @RequestMapping(value = "/deleteByPath", method = RequestMethod.GET)
     public ResponseEntity<String> deleteByPath (){
         String filePathName = "group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png" ;
         fileDfsUtil.deleteFile(filePathName);
         return ResponseEntity.ok("SUCCESS") ;
     }
}
  1. 6.springBoot 启动类
 @SpringBootApplication
 @EnableSwagger2
 public class EmailApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(EmailApplication.class, args);
     }
 
 }

启动项目

访问:http://localhost:8080/swagger-ui.html

img

返回地址表示上传成功。

怎么访问呢?

默认的话,是通过你的 ip:8888 / 上面返回的地址 如果你是阿里云服务就要手动开放 8888、22122、23000 这三个端口

img

下一篇: Docker 部署 Confluence(破解版)→