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

编程

背景

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

当我们在使用对应云厂商产品的时候,只需要引入对应尝试提供的 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权限管理系统 欢迎关注

以上是 「一站式」兼容所有云厂商文件存储SpringBoot实现 的全部内容, 来源链接: utcz.com/z/519103.html

回到顶部