• 第2-1-4章 SpringBoot整合FastDFS文件存储服务


    5 SpringBoot整合

    5.1 操作步骤

    1. 配置FastDFS执行环境
    2. 文件上传配置
    3. 整合Swagger2测试接口

    5.2 项目依赖

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

    5.3 客户端开发

    5.3.1 FastDFS配置

    fdfs:
      # 链接超时
      connect-timeout: 60
      # 读取时间
      so-timeout: 60
      # 生成缩略图参数
      thumb-image:
        width: 150
        height: 150
      tracker-list: 192.168.86.101:22122
    

    5.3.2 FastDFS配置类

    @Configuration
    @Import(FdfsClientConfig.class)
    // 避免Jmx重复注册bean
    @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
    public class DFSConfig {
    
    }
    

    5.3.3 文件工具类

    import com.github.tobato.fastdfs.domain.fdfs.StorePath;
    import com.github.tobato.fastdfs.service.FastFileStorageClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    import javax.annotation.Resource;
    
    
    @Component
    public class FileDfsUtil {
        private static final Logger LOGGER = LoggerFactory.getLogger(FileDfsUtil.class);
        @Resource
        private FastFileStorageClient storageClient ;
        /**
         * 上传文件
         */
        public String upload(MultipartFile multipartFile) throws Exception{
            String originalFilename = multipartFile.getOriginalFilename().
                    substring(multipartFile.getOriginalFilename().
                            lastIndexOf(".") + 1);
            StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
                    multipartFile.getInputStream(),
                    multipartFile.getSize(),originalFilename , 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.3.4 文件上传配置

    spring:
      application:
        name: fdfs-demo
      jackson:
        time-zone: GMT+8
        date-format: yyyy-MM-dd HH:mm:ss
      servlet:
        multipart:
          max-file-size: 100MB
          max-request-size: 100MB
          enabled: true
    

    5.3.5 配置Swagger2

    配置类:

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    
    /**
     * Swagger 配置文件
     */
    @Configuration
    public class SwaggerConfig {
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.itheima.fdfs.demo"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("SpringBoot利用Swagger构建API文档")
                    .description("Fast DFS接口")
                    .version("version 1.0")
                    .build();
        }
    }
    

    启动类:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    @EnableSwagger2
    @SpringBootApplication
    public class FdfsDemoApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(FdfsDemoApplication.class, args);
    	}
    }
    

    5.3.6 API接口

    import com.itheima.fdfs.demo.common.FileDfsUtil;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.http.ResponseEntity;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.annotation.Resource;
    
    @RestController
    public class FileController {
        @Resource
        private FileDfsUtil fileDfsUtil ;
        /**
         * http://localhost:8081/swagger-ui.html
         */
        @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/rBIAAmNmi82AJxLsAABdrZgsqUU214.jpg" ;
            fileDfsUtil.deleteFile(filePathName);
            return ResponseEntity.ok("SUCCESS") ;
        }
    }
    

    5.4 接口演示

    1. 访问页面:http://localhost:8081/fdfs-demo/swagger-ui.html
      在这里插入图片描述

    2. 测试接口

      • 上传接口
      • 删除接口
  • 相关阅读:
    kaggle新赛:UBC卵巢癌亚型分类和异常检测大赛【图像分类】
    【疑问解决】在自动装箱中Integer赋予一个常量1,为什么会出现==判断true和flase的情况(JDK源码、内部缓冲)
    850. 矩形面积 II--(每日一难phase--day16)
    人脸检测及追踪回顾
    网络安全笔记--SQL注入
    【JAVA SE】JAVA中的集合的基础知识
    基于ChatGPT打造安全脚本工具流程
    如何在github上面找到想要的sdk以及Python使用Etcd集群基础教程
    结构体,位段!
    python+pytest接口自动化(2)-HTTP协议基础
  • 原文地址:https://www.cnblogs.com/gitBook/p/16868074.html