SpringBoot+COS快速入門
按照 SpringBoot微服務快速入門案例,搭建一個SpringBoot基礎項目,名字叫
springBoot_cos_dome
本文主要總結騰訊COS對象存儲:官網文檔
- 導入對象存儲SDK依賴
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.45</version>
</dependency>
- 建立
并建立com.lu.controller
COSController
- 通過SDK,封裝建立連接配接對象方法,秘鑰可以從官網擷取
public COSClient getCosClient(){
String secretId = "****";
String secretKey = "****";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
Region region = new Region("COS_REGION");
ClientConfig clientConfig = new ClientConfig(region);
// 這裡建議設定使用 https 協定
clientConfig.setHttpProtocol(HttpProtocol.https);
return new COSClient(cred, clientConfig);
}
- 寫一個控制方法,傳回存儲桶清單
@GetMapping("getList")
public List<Bucket> getList() {
return getCosClient().listBuckets();
}
- 最後通過通路 ,即可看到自己存儲桶的清單JSON資料及連接配接成功了
http://127.0.0.1:8080/getList
一、 建立存儲桶
public Boolean createBucketRequest(String cosName) {
CreateBucketRequest createBucketRequest = new CreateBucketRequest(cosName);
createBucketRequest.setCannedAcl(CannedAccessControlList.Private); 設定 bucket 的權限為 Private(私有讀寫)、其他可選有 PublicRead(公有讀私有寫)、PublicReadWrite(公有讀寫)
try {
Bucket bucketResult = getCosClient().createBucket(createBucketRequest);
return true;
} catch (Exception e) {
return false;
}
}
二、上傳檔案
public Boolean upFile(UpFile file) {
// 指定要上傳的檔案
File localFile = new File(file.getLocalFilePath());
// 指定檔案上傳到 COS 上的路徑,即對象鍵。例如對象鍵為folder/picture.jpg,則表示将檔案 picture.jpg 上傳到 folder 路徑下
PutObjectResult putObjectResult = getCosClient().putObject(file.getBucketName(), file.getKey(), localFile);
String etag = putObjectResult.getETag(); // 擷取檔案的 etag
return true;
}
三、擷取對象清單
public List<Map<String,Object>> getFileList(String bucketName){
List<Map<String,Object>> list=new ArrayList<>();
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
// 設定bucket名稱
listObjectsRequest.setBucketName(bucketName);
// deliter表示分隔符, 設定為/表示列出目前目錄下的object, 設定為空表示列出所有的object
listObjectsRequest.setDelimiter("/");
// 設定最大周遊出多少個對象, 一次listobject最大支援1000
listObjectsRequest.setMaxKeys(1000);
ObjectListing objectListing = null;
do {
try {
objectListing = getCosClient().listObjects(listObjectsRequest);
} catch (Exception e) {
e.printStackTrace();
}
Map<String,Object> map=new HashMap<>();
// common prefix表示表示被delimiter截斷的路徑, 如delimter設定為/, common prefix則表示所有子目錄的路徑
List<String> commonPrefixs = objectListing.getCommonPrefixes();
map.put("commonPrefixs",commonPrefixs);
// object summary表示所有列出的object清單
List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();
for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
// 檔案的路徑key
String key = cosObjectSummary.getKey();
// 檔案的etag
String etag = cosObjectSummary.getETag();
// 檔案的長度
long fileSize = cosObjectSummary.getSize();
// 檔案的存儲類型
String storageClasses = cosObjectSummary.getStorageClass();
map.put("key",cosObjectSummary.getKey());
map.put("etag",cosObjectSummary.getETag());
map.put("fileSize",cosObjectSummary.getSize());
map.put("storageClasses",cosObjectSummary.getStorageClass());
}
String nextMarker = objectListing.getNextMarker();
listObjectsRequest.setMarker(nextMarker);
list.add(map);
} while (objectListing.isTruncated());
return list;
}
四、 删除對象
@GetMapping("/deleteFile")
private Boolean deleteFile(String name, String key) {
cosService.getCosClient().deleteObject(name, key);
return false;
}