zoukankan      html  css  js  c++  java
  • leyou_06_图片上传至FastDFS

    1.推荐一个开源的FastDFS客户端,支持最新的SpringBoot2.0。配置使用极为简单,支持连接池,支持自动生成缩略图

      1.1 在文件上传的微服务中 引入依赖

    <dependency>
        <groupId>com.github.tobato</groupId>
        <artifactId>fastdfs-client</artifactId>
        <version>1.26.2</version>
    </dependency>

      

      1.2引入配置启动类

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

      

      1.3配置Fast的属性

    fdfs:
      so-timeout: 1501
      connect-timeout: 601
      thumb-image: # 缩略图
         60
        height: 60
      tracker-list: # tracker地址
        - 192.168.56.101:22122

      

      1.4测试(测试的包名要和java中的包名一致哦)

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class FdfsTest {
    
        @Autowired
        private FastFileStorageClient storageClient;
    
        @Autowired
        private ThumbImageConfig thumbImageConfig;
    
        @Test
        public void testUpload() throws FileNotFoundException {
            File file = new File("D:\test\baby.png");
            // 上传并且生成缩略图
            StorePath storePath = this.storageClient.uploadFile(
                    new FileInputStream(file), file.length(), "png", null);
            // 带分组的路径
            System.out.println(storePath.getFullPath());
            // 不带分组的路径
            System.out.println(storePath.getPath());
        }
    
        @Test
        public void testUploadAndCreateThumb() throws FileNotFoundException {
            File file = new File("D:\test\baby.png");
            // 上传并且生成缩略图
            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);
        }
    }

      配置上传文件大小的限制

    #配置最大上传图片大小
        client_max_body_size 10m;

      1.5测试成功

    group1/M00/00/00/wKg4ZVro5eCAZEMVABfYcN8vzII630.png
    M00/00/00/wKg4ZVro5eCAZEMVABfYcN8vzII630.png
    M00/00/00/wKg4ZVro5eCAZEMVABfYcN8vzII630_60x60.png

    2.修改文件上传Service

    @Service
    @Slf4j
    //获得配置文件类 @EnableConfigurationProperties(UploadProperties.
    class) public class UploadService { @Autowired private UploadProperties properties; @Autowired private FastFileStorageClient storageClient; //private static final List<String> ALLOW_TYPES= Arrays.asList("image/jpeg","image/png"); public String uploadImg(MultipartFile file) { try { //检验文件的类型 防止恶意文件 String contentType = file.getContentType(); if (!properties.getAllowTypes().contains(contentType)){ throw new LyException(ExceptionEnum.INVALID_FILE_TYPE); }; //校验文件的内容 BufferedImage image = ImageIO.read(file.getInputStream()); if (image==null){ throw new LyException(ExceptionEnum.INVALID_FILE_TYPE); } //保存文件到本地 //File local = new File("F:\javaee\IdeaResource\uploadImg\",file.getOriginalFilename()); // file.transferTo(local); String suffix= StringUtils.substringAfterLast(file.getOriginalFilename(),"."); StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), suffix, null); //返回文件地址 return properties.getBaseUrl()+storePath.getFullPath(); } catch (IOException e) { log.error("[文件上传] 上传文件失败",e); throw new LyException(ExceptionEnum.UPLOAD_FILE_ERROR); } } }

      2.1配置文件类从 application.yaml中读取参数

    @Data
    //加载带有ly.upload前缀的配置文件属性 @ConfigurationProperties(prefix
    = "ly.upload") public class UploadProperties { private String baseUrl; private List<String> allowTypes; }

      2.2配置文件application.yaml

    server:
      port: 8082
      servlet:
        session:
          cookie:
            http-only:
    spring:
      application:
        name: upload-service
      servlet:
        multipart:
        #最大上传文件
          max-file-size: 5MB
        #每次请求上传文件总和最大限制
          max-request-size: 10MB
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka
      instance:
        ip-address: 127.0.0.1
        prefer-ip-address: true
    
    fdfs:
      so-timeout: 2500
      connect-timeout: 600
      thumb-image: # 缩略图
         60
        height: 60
      tracker-list: # tracker地址
         - 192.168.98.128:22122
    
    ly:
      upload:
        baseUrl: http://image.leyou.com/
        allowTypes:
          - image/jpeg
          - image/png
          - image/bmp

      2.3会被读取到配置文件类中去

    ly:
      upload:
        baseUrl: http://image.leyou.com/
        allowTypes:
          - image/jpeg
          - image/png
          - image/bmp

    测试成功

  • 相关阅读:
    ORB-SLAM(五)优化
    ORB-SLAM(四)追踪
    ORB-SLAM(三)地图初始化
    SVM(支持向量机)的一点理解
    ORB-SLAM(二)性能
    ORB-SLAM(一)简介
    支持高并发的IIS Web服务器常用设置
    微信JS SDK Demo
    C#开发微信门户及应用-使用地理位置扩展相关应用
    DropdownListFor无法正确绑定值-同名问题
  • 原文地址:https://www.cnblogs.com/asndxj/p/11604728.html
Copyright © 2011-2022 走看看