「一站式」相容所有云廠商檔案儲存Spring Boot 實現
阿新 • • 發佈:2020-08-06
背景
在網際網路發展的今天,近乎所有的雲廠商都提供物件儲存服務。一種海量、安全、低成本、高可靠的雲端儲存服務,適合存放任意型別的檔案。容量和處理能力彈性擴充套件,多種儲存型別供選擇,全面優化儲存成本。
當我們在使用對應雲廠商產品的時候,只需要引入對應嘗試提供的 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 擴充套件