使用docker安装fastDFS,并SpringBoot整合测试

1. 安装fastdfs必要组件 tracker 什么都不用改

docker run -d --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

2. 安装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

3. 进入容器修改配置 一定要,要不然链接不上

docker exec -it tracker bash

4. 修改配置

vi /etc/fdfs/client.conf

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

到这其实fastDFS就配好了

5. 创建项目测试

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

5.1 pom依赖

        
        
            com.github.tobato
            fastdfs-client
            1.26.5
        
        
        
            io.springfox
            springfox-swagger2
            2.6.1
        
        
            io.springfox
            springfox-swagger-ui
            2.6.1
        

5.2 配置 yml 需要修改ip

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

5.3 配置文件(两个)

SwaggerConfig.java

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //一定要改成你自己项目的controller包路径,这里会扫描你的接口
                .apis(RequestHandlerSelectors.basePackage("com.example.fastdfs.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 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 deleteByPath() {
        String filePathName = "group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png";
        fileDfsUtil.deleteFile(filePathName);
        return ResponseEntity.ok("SUCCESS");
    }
}

5.6 SpringBoot启动类

@EnableSwagger2
@SpringBootApplication
public class FastdfsApplication {
    public static void main(String[] args) {
        SpringApplication.run(FastdfsApplication.class, args);
    }
}

5.7 测试

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

使用docker安装fastDFS,并SpringBoot整合测试_第1张图片
上传测试.png

Response Body返回地址表示上传成功。

5.8 访问图片

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

例如:http://10.168.1.118:8888/group1/M00/00/00/CqgBdl-90d2ACoMBAABNQiCy_dw419.jpg

转载:原文地址

你可能感兴趣的:(使用docker安装fastDFS,并SpringBoot整合测试)