SpringBoot 对象存储

  • Post author:
  • Post category:其他




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;
}



版权声明:本文为qq_44691287原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。