• 「一站式」兼容所有云厂商文件存储Spring Boot 实现


    背景

    在互联网发展的今天,近乎所有的云厂商都提供对象存储服务。一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

    当我们在使用对应云厂商产品的时候,只需要引入对应尝试提供的 SDK ,根据其开发文档实现即可。但是当我们接入的云厂商较多(或者能够保证接口水平迁移时),我们要根据目标厂商接口破坏性修改

    如下提供了几家厂商接口 SDK 上传实例:

    阿里云

    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 创建PutObjectRequest对象。
    String content = "Hello OSS";
    PutObjectRequest putObjectRequest = new PutObjectRequest("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()));
    
    // 上传字符串。
    ossClient.putObject(putObjectRequest);
    
    // 关闭OSSClient。
    ossClient.shutdown();
    

    华为云

    String endPoint = "https://your-endpoint";
    String ak = "*** Provide your Access Key ***";
    String sk = "*** Provide your Secret Key ***";
    // 创建ObsClient实例
    ObsClient obsClient = new ObsClient(ak, sk, endPoint);
    
    obsClient.putObject("bucketname", "objectname", new File("localfile")); // localfile为待上传的本地文件路径,需要指定到具体的文件名
    

    七牛云

    Configuration cfg = new Configuration(Region.region0());
    UploadManager uploadManager = new UploadManager(cfg);
    String accessKey = "your access key";
    String secretKey = "your secret key";
    String localFilePath = "/home/qiniu/test.png";
    String key = null;
    
    Auth auth = Auth.create(accessKey, secretKey);
    String upToken = auth.uploadToken(bucket);
    Response response = uploadManager.put(localFilePath, key, upToken);
    

    解决方案

    Amazon S3 协议

    Amazon 是最早提供对象存储服务 的厂商,制定文件存储相关的业内标准,这意味着只需要实现 S3 协议即可接入兼容此协议的文件存储厂商和中间件。当然 S3 协议不仅仅是技术实现要求标准,对于可用性等都有具体的要求。

    兼容 S3 协议国内云厂商

    名称 地址
    阿里云 https://www.aliyun.com
    华为云 https://www.huaweicloud.com
    腾讯云 https://cloud.tencent.com
    七牛云 https://www.qiniu.com
    金山云 https://www.ksyun.com

    如何使用

    • 引入依赖。 引入此依赖,无需在引入云厂商 SDK
    <dependency>
        <groupId>com.pig4cloud.plugin</groupId>
        <artifactId>oss-spring-boot-starter</artifactId>
        <version>0.0.1</version>
    </dependency>
    
    • 配置文件存储
    oss:
      path-style-access: false    #请求路径是否 XXX/{bucketName}
      endpoint: s3-cn-east-1.qiniucs.com
      access-key: xxx    # 云厂商提供的key
      secret-key: xxx    # 云厂商提供的密钥
      bucketName: pig4cloud     # 上文创建的桶名称
    
    • 操作
    
    @Autowire
    private final OssTemplate ossTemplate;
    
    ossTemplate.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream());
    

    支持 MINIO 等自建文件存储

    • 创建 minio
    docker run -p 9000:9000 --name minio1 
      -e "MINIO_ACCESS_KEY=lengleng" 
      -e "MINIO_SECRET_KEY=lengleng" 
      minio/minio server /data
    
    • 配置 minio 参数
    # 文件系统
    oss:
      path-style-access: true
      endpoint: http://IP:9000
      access-key: lengleng
      secret-key: lengleng
      bucketName: lengleng
    
    • 使用 OssTemplate 上传即可

    源码地址:

    https://github.com/pig-mesh/oss-spring-boot-starter 欢迎 fork 扩展

    项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

  • 相关阅读:
    前端知识体系(一)浏览器机制以及进程线程的关系
    页面之间的通信
    DOM
    浏览器内核及浏览器对象
    js正则表达式
    setTimeout和setInterval
    原生js操作cookie
    apply、call、bind方法调用
    一个简单的hexo搭建博客网站的故事
    debug for bin runtime error
  • 原文地址:https://www.cnblogs.com/leng-leng/p/13444302.html
Copyright © 2020-2023  润新知