• 第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. 测试接口

      • 上传接口
      • 删除接口
  • 相关阅读:
    寻找 llvm v3.5 的目标代码生成模块
    Flutter快学快用17 打包发布:Flutter 应用,你离线上运营只差最后一步
    织梦CMS采集插件-DEDE插件大全
    二分查找算法解析
    Excel中将文本格式的数值转换为数字
    SpringMVC-CRUD与文件上传,文件下载
    [附源码]Python计算机毕业设计Django基于Web的绿色环保网站
    Java字符串常用操作
    基于多尺度注意力网络单图像超分(MAN)
    匈牙利算法 -- Acwing 861. 二分图的最大匹配
  • 原文地址:https://www.cnblogs.com/gitBook/p/16868074.html