文件存儲是我們項目中經(jīng)常要用到的能力,一般處理方法有如下幾種:
- 以文件的方式存儲到服務器上刻诊,這種情況適合小規(guī)模存儲需求玫镐,是服務和存儲一體化的解決方案告组,存在的弊病就是耦合性過大,不容易擴展拉庶。
- 借助一些第三方存儲系統(tǒng)存儲嗜憔,例如數(shù)據(jù)庫、分布式文件系統(tǒng)等氏仗,這樣的方案系統(tǒng)耦合性低吉捶、擴展性強,也是目前系統(tǒng)架構中常用的方式皆尔,但是對第三方系統(tǒng)的運維有較高要求呐舔。
- 利用成熟的云平臺存儲服務。目前市場上知名的云服務平臺都有此服務慷蠕,這樣的解決方案除了具備分布式存儲的諸多優(yōu)點外珊拼,最重要的是免維護,開發(fā)流炕、調(diào)試澎现、運營、運維成本都很低每辟,而且服務穩(wěn)定可靠剑辫。今天就以阿里云的OSS服務作以簡要介紹。
服務開通
首先要開通阿里云賬號渠欺,然后開通OSS服務妹蔽。
OSS控制臺
查閱相關開發(fā)者指南
阿里云提供了詳細的開發(fā)者文檔,通過這些文檔就可以完全掌握如何使用OSS功能挠将。
引入OSS java依賴包
<!-- 阿里云OSS依賴包 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
配置相關參數(shù)
本示例遵循consul微服務的基本架構胳岂,配置參數(shù)全部以Key/Value的方式存儲到consul配置中心。
OSS接入?yún)?shù)
對應的java配置屬性bean為:
package com.crazyice.lee.accumulation.file.conf;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "oss")
public class OssConf {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
接口調(diào)用測試
阿里云OSS除了提供bucket創(chuàng)建舔稀、各種對象上傳/下載旦万、資源列表、刪除等基本功能外镶蹋,還包括了圖像處理、ACL、自定義域名贺归、數(shù)據(jù)備份遷移淆两、資源管理工具等輔助能力。這里通過JUnitTest演示幾個典型功能來簡要說明一下OSS API的使用方式拂酣。
-
創(chuàng)建bucket
bucket是一個根存儲節(jié)點秋冰,你的對象資源都存儲在你定義的bucket下,通過控制臺創(chuàng)建該bucket婶熬。
創(chuàng)建bucket
1.1 首先把配置bean注入到測試類中剑勾。
@Autowired
private OssConf ossConf;
1.2 測試創(chuàng)建bucket
@Test
public void testOssCreateBucket(){
// 創(chuàng)建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(ossConf.getEndpoint(), ossConf.getAccessKeyId(), ossConf.getAccessKeySecret());
// 創(chuàng)建存儲空間赵颅。
ossClient.createBucket(ossConf.getBucketName());
// 關閉OSSClient虽另。
ossClient.shutdown();
}
- 上傳文件
OSS服務提供了多種上傳文件的方式,有流方式饺谬、有文件方式捂刺,這里演示一下本地文件方式。
@Test
public void testOssUploadFile(){
// 創(chuàng)建OSSClient實例募寨。
OSS ossClient = new OSSClientBuilder().build(ossConf.getEndpoint(), ossConf.getAccessKeyId(), ossConf.getAccessKeySecret());
// 上傳本地文件
ossClient.putObject(ossConf.getBucketName(),"test1",new File("/Users/crazyicelee/wordcount.txt"));
// 關閉OSSClient族展。
ossClient.shutdown();
}
- 查看已經(jīng)存儲的資源列表
@Test
public void testOssList(){
// 創(chuàng)建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(ossConf.getEndpoint(), ossConf.getAccessKeyId(), ossConf.getAccessKeySecret());
// 獲取資源列表
ObjectListing objectListing=ossClient.listObjects(ossConf.getBucketName());
for(OSSObjectSummary ossObjectSummary:objectListing.getObjectSummaries()){
log.info("云存儲對象:{}-{}",ossObjectSummary.getKey(),ossObjectSummary.getSize());
}
// 關閉OSSClient拔鹰。
ossClient.shutdown();
}
控制臺管理OSS
阿里云既提供了API方式使用這些功能仪缸,也提供了控制臺方式管理你的云端資源,功能全面列肢,操作簡單恰画,本文就不贅述,大家感興趣可以自行了解例书。
從以上代碼示例大家可以看出锣尉,使用阿里云的OSS非常簡潔,如果你的項目對云存儲沒有特殊的要求可以考慮使用公有云平臺的OSS服務决采,這樣可以大大節(jié)約項目的實施成本自沧、提高實施效率。