【學習筆記】騰訊雲對象存儲COS的Java-SDK初探

什麼是對象存儲

採用比較官方的說法就是,就是基於對象的存儲,和文件結構差不多,但是不具備層次,所有的文件都是同級存儲在一個扁平化的存儲池(存儲桶)中。

當然,這些文字東西就不去深究,對象存儲能夠簡化項目中對象的存儲問題,將對象存儲與系統分離,分開管理優化,特別是在現在雲計算流行的趨勢下,對象存儲已經逐漸走上舞臺。

騰訊雲對象存儲COS

COS是騰訊雲提供的一種存儲海量文件的分佈式存儲服務,用戶可通過網絡隨時存儲和查看數據。騰訊雲 COS 使所有用戶都能使用具備高擴展性、低成本、可靠和安全的數據存儲服務。

COS 通過控制檯、API、SDK 和工具等多樣化方式簡單、快速地接入,實現了海量數據存儲和管理。通過 COS 可以進行多格式文件的上傳、下載和管理。騰訊雲提供了直觀的 Web 管理界面,同時遍佈全國範圍的 CDN 節點可以對文件下載進行加速。

COS下載與安裝

  1. 首先當然是從騰訊雲中購買COS服務。
  2. 下載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>

初始化客戶端

		// 在騰訊雲的密鑰中心創建密鑰,然後拿到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();

錯誤碼參考

錯誤碼官方參考文檔:錯誤碼參考文檔.

官方文檔入口

騰訊COS官方文檔

自寫Demo下載

這是我測試的時候自己寫的Demo,有興趣的小夥伴可以下載參考,若有錯誤,歡迎指正,我的使用環境是Eclipse+JDK1.8。
百度網盤地址:Demo地址
提取碼:1a5w

以上是樓主所自學,結合官方文檔自己整理出來的,學習路上還有很遠路要走,若各位大佬發現有錯誤的地方,還請及時指正,先謝過了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章