騰訊雲對象存儲COS的JavaSDK應用
什麼是對象存儲
採用比較官方的說法就是,就是基於對象的存儲,和文件結構差不多,但是不具備層次,所有的文件都是同級存儲在一個扁平化的存儲池(存儲桶)中。
當然,這些文字東西就不去深究,對象存儲能夠簡化項目中對象的存儲問題,將對象存儲與系統分離,分開管理優化,特別是在現在雲計算流行的趨勢下,對象存儲已經逐漸走上舞臺。
騰訊雲對象存儲COS
COS是騰訊雲提供的一種存儲海量文件的分佈式存儲服務,用戶可通過網絡隨時存儲和查看數據。騰訊雲 COS 使所有用戶都能使用具備高擴展性、低成本、可靠和安全的數據存儲服務。
COS 通過控制檯、API、SDK 和工具等多樣化方式簡單、快速地接入,實現了海量數據存儲和管理。通過 COS 可以進行多格式文件的上傳、下載和管理。騰訊雲提供了直觀的 Web 管理界面,同時遍佈全國範圍的 CDN 節點可以對文件下載進行加速。
COS下載與安裝
- 首先當然是從騰訊雲中購買COS服務。
- 下載SDK,這裏主要講述兩種方法。
- maven引用安裝(新版舊版二選一):
<dependency>// 新版的SDK
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.0.8</version>
<!-- 注:這裏只是示例版本號,請到 https://mvnrepository.com/artifact/com.tencentcloudapi/tencentcloud-sdk-java 獲取最新版本號 -->
</dependency>
<dependency>// 舊版SDK,推薦使用新版
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.5.7</version>
</dependency>
-
從GitHub下載源碼導入
GitHub源碼地址:GitHub源碼地址. -
GitHub上的Demo地址:GitHub官方Demo地址.
初始化客戶端
// 在騰訊雲的密鑰中心創建密鑰,然後拿到SecretId和SecretKey
String secretId = "your_id";
String secretKey = "your_key";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// bucket的地域,地域的簡稱請參照 https://cloud.tencent.com/document/product/436/6224
Region region = new Region("ap-chengdu");
// config可以設置請求參數,具體參考下表
ClientConfig clientConfig = new ClientConfig(region);
// 生成 cos 客戶端
client = new COSClient(cred, clientConfig);
- ClientConfig參數配置表
成員名 | 設置方法 | 描述 | 類型 |
---|---|---|---|
region | 構造函數或set | 存儲桶所在的區域 | Region |
httpProtocol | set | 請求所使用的協議,默認使用 HTTP 協議與 COS 交互 | HttpProtocol |
signExpired | set | 請求籤名的有效時間,默認爲1小時 | int |
connectionTimeout | set | 連接 COS 服務的超時時間,默認爲30s | int |
socketTimeout | set | 客戶端讀取數據的超時時間,默認爲30s | int |
httpProxyIp | set | 代理服務器的 IP | String |
httpProxyPort | set | 代理服務器的端口 | int |
創建存儲桶(Bucket)
//存儲桶名稱,格式:BucketName-APPID
// 注:APPID每個賬戶有固定的ID,可在賬戶中心查詢自己的APPID
String bucket = "examplebucket-1250000000";
CreateBucketRequest createBucketRequest = new CreateBucketRequest(name);
// 設置 bucket 的權限爲 PublicRead(公有讀私有寫), 其他可選有私有讀寫, 公有讀寫
createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
try{
// 返回創建好的存儲桶信息
Bucket bucketResult = client.createBucket(createBucketRequest);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
查詢存儲桶
// 核心就這一句話,然後遍歷buckey獲取每個bucket信息即可
List<Bucket> list=client.listBuckets();
上傳文件
try {
// 指定要上傳的文件
File localFile = new File("your_file_path");
// 指定要上傳到的存儲桶
String bucketName = "examplebucket-1252449330";
// 指定要上傳到 COS 上對象鍵,即文件名稱, 若文件名已存在則會覆蓋
String key = "somekey";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
PutObjectResult putObjectResult = client.putObject(putObjectRequest);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
按照官方文檔上面的說法:使用此方法上傳文件儘量控制在20M以內,最大不能超過5G,大文件可以採用分塊上傳或高級 API 接口上傳。
下載文件
try{
// 指定對象所在的存儲桶
String bucketName = "examplebucket-1252449330";
// 指定對象在 COS 上的對象鍵,即文件名稱
String key = "somekey";
// 指定要下載到的本地路徑
File downFile = new File("D:\\file.txt");
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
ObjectMetadata downObjectMeta = client.getObject(getObjectRequest, downFile);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
查詢Bucket內的對象
try {
// bucket名稱
String bucket = "examplebucket-1250000000";
// 創建遍歷請求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
// 設置 bucket 名稱
listObjectsRequest.setBucketName(bucket);
// 設置對象前綴,可以此過濾部分對象
listObjectsRequest.setPrefix("");
// 設置最大遍歷出多少個對象, 一次 listobject 最大支持1000
listObjectsRequest.setMaxKeys(1000);
listObjectsRequest.setDelimiter("/");
ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
for (COSObjectSummary cosObjectSummary : objectListing.getObjectSummaries()) {
// 對象的路徑 key,即文件名
String key = cosObjectSummary.getKey();
// 對象的 etag
String etag = cosObjectSummary.getETag();
// 對象的長度
long fileSize = cosObjectSummary.getSize();
// 對象的存儲類型
String storageClass = cosObjectSummary.getStorageClass();
System.out.println("key:" + key + "; etag:" + etag + "; fileSize:" + fileSize + "; storageClass:" + storageClass);
}
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
刪除Bucket內的對象
try {
// 指定對象所在的存儲桶
String bucketName = "examplebucket-1250000000";
// 指定對象在 COS 上的對象鍵
String key = "somekey";
cosClient.deleteObject(bucketName, key);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
關閉客戶端對象
// 關閉客戶端(關閉後臺線程)
cosClient.shutdown();
錯誤碼參考
錯誤碼官方參考文檔:錯誤碼參考文檔.
官方文檔入口
自寫Demo下載
這是我測試的時候自己寫的Demo,有興趣的小夥伴可以下載參考,若有錯誤,歡迎指正,我的使用環境是Eclipse+JDK1.8。
百度網盤地址:Demo地址
提取碼:1a5w
以上是樓主所自學,結合官方文檔自己整理出來的,學習路上還有很遠路要走,若各位大佬發現有錯誤的地方,還請及時指正,先謝過了。