天天看點

SpringBoot 對象存儲SpringBoot+COS快速入門

SpringBoot+COS快速入門

按照 SpringBoot微服務快速入門案例,搭建一個SpringBoot基礎項目,名字叫

springBoot_cos_dome

本文主要總結騰訊COS對象存儲:官網文檔

  1. 導入對象存儲SDK依賴
<dependency>
    <groupId>com.qcloud</groupId>
    <artifactId>cos_api</artifactId>
    <version>5.6.45</version>
</dependency>
           
  1. 建立

    com.lu.controller

    并建立

    COSController

  2. 通過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);
}
           
  1. 寫一個控制方法,傳回存儲桶清單
@GetMapping("getList")
public List<Bucket> getList() {
    return getCosClient().listBuckets();
}
           
  1. 最後通過通路 ,即可看到自己存儲桶的清單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;
}