腾讯云存储COS

2023-11-18

简介:

对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。

网址:对象存储数据处理_COS数据处理_数据处理方案-腾讯云

大家可以选购这几种套餐

 选好套餐开通腾讯云存储对象Cos 开通以后的样子

主要分为俩大类请求方式一种是你自己封装http3请求从后端去发请求,另一种比较简单我这里推荐大家使用SDK的 。

导入pom.xml依赖

<dependency>
       <groupId>com.qcloud</groupId>
       <artifactId>cos_api</artifactId>
       <version>5.6.54</version>
</dependency>

编写config配置文件

public interface configuration {
    //id
    String secretId="*****";
    //key
    String secretKey="******";
    //创建桶对象时需要
    String APPID = "****";
    //创建桶时需要的区域
    String REGIONID = "***";// 区域
}

 封装工具包

1.(对存储桶操作)

package com.baidu.util;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.Bucket;
import com.qcloud.cos.model.CannedAccessControlList;
import com.qcloud.cos.model.CreateBucketRequest;
import com.qcloud.cos.region.Region;

import java.util.List;

import static com.baidu.config.configuration.*;

/**
 * 使用cos对数据桶的基本操作
 * */
public class cosBucketUtil {
    /**
     * * 初始化CosClient相关配置, appid、accessKey、secretKey、region * @return
     */
    public static COSClient getCosClient() {
       // 1 初始化用户身份信息(secretId, secretKey)。
       // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); // 不传APPID也可以,APPID和ACCESSKE已经关联过
        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
       //REGIONID地域
        ClientConfig clientConfig = new ClientConfig(new Region(REGIONID));
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        //生成cos客户端
        COSClient cosclient = new COSClient(cred, clientConfig);
        return cosclient;
    }
    /***
     * 创建桶
     * cosClient 客户端连接对象
     * bucketName 自定义名称
     *
     * */
    public static Bucket createBucket(COSClient cosClient,String  bucketName) throws CosClientException, CosServiceException {
        String bucket = bucketName+"-"+APPID; //存储桶名称,格式:BucketName-APPID
        CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
// 设置 bucket 的权限为 Private(私有读写), 其他可选有公有读私有写, 公有读写
        createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
        Bucket bucketResult = cosClient.createBucket(createBucketRequest);
        return bucketResult;
    };
    /**
     * 查询桶列表
     * cosClient 客户端连接对象
     * */
    public static List<Bucket> listBuckets(COSClient cosClient) throws CosClientException, CosServiceException{
        // 如果只调用 listBuckets 方法,则创建 cosClient 时指定 region 为 new Region("") 即可
        List<Bucket> buckets = cosClient.listBuckets();
        return buckets;
    }

    /**
     * 删除存储桶
     * 功能说明
     * 删除指定账号下的空存储桶。
     * cosClient 客户端连接对象,桶名称
     * **/
    public static void deleteBucket(COSClient cosClient,String bucketName) throws CosClientException, CosServiceException{
        cosClient.deleteBucket(bucketName);
    };

    /**
     * 判断某个桶是否存在
     * cosClient 初始化桶
     * bucketName 桶名称
     * */
    public static Boolean getdoesBucketExist(COSClient cosClient,String bucketName){
        return cosClient.doesBucketExist(bucketName+"-"+APPID);
    }

    public static void main(String[] args) {
     /*   //1.获取桶连接
        final COSClient cosClient = cosBucketUtil.getCosClient();
        String buckentName="ee";
        //2.判断桶是否存在
        final Boolean aBoolean = cosBucketUtil.getdoesBucketExist(cosClient, buckentName);
        if (aBoolean){
            //查询桶列表
             List<Bucket> buckets = cosBucketUtil.listBuckets(cosClient);
            for (Bucket bucket : buckets) {
                System.out.println("桶名称"+bucket.getName());
                System.out.println("桶的地域"+bucket.getLocation());
            }
        }else {
            //新增桶
             Bucket bucket = cosBucketUtil.createBucket(cosClient, buckentName);

        }*/
        final COSClient cosClient = cosBucketUtil.getCosClient();
//删除桶
        cosBucketUtil.deleteBucket(cosClient,"ee-1311510668");
    }
}

cos对上传的操作

package com.baidu.util;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.UploadResult;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.*;

import java.io.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static com.baidu.config.configuration.*;

//上传操作
public class teanstreUtil {

    /**
     * * 初始化CosClient相关配置, appid、accessKey、secretKey、region * @return
     */
    public static COSClient getCosClient() {
        // 1 初始化用户身份信息(secretId, secretKey)。
        // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); // 不传APPID也可以,APPID和ACCESSKE已经关联过
        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
        //REGIONID地域
        ClientConfig clientConfig = new ClientConfig(new Region(REGIONID));
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        //生成cos客户端
        COSClient cosclient = new COSClient(cred, clientConfig);
        return cosclient;
    }

    /** 创建 TransferManager 实例,这个实例用来后续调用高级接口
     * cosClient 初始化实例对象
     * **/
  public static   TransferManager createTransferManager(COSClient cosClient) {
        // 创建一个 COSClient 实例,这是访问 COS 服务的基础实例。
        // 详细代码参见本页: 简单操作 -> 创建 COSClient
        // 自定义线程池大小,建议在客户端与 COS 网络充足(例如使用腾讯云的 CVM,同地域上传 COS)的情况下,设置成16或32即可,可较充分的利用网络资源
        // 对于使用公网传输且网络带宽质量不高的情况,建议减小该值,避免因网速过慢,造成请求超时。
        ExecutorService threadPool = Executors.newFixedThreadPool(32);

        // 传入一个 threadpool, 若不传入线程池,默认 TransferManager 中会生成一个单线程的线程池。
        TransferManager transferManager = new TransferManager(cosClient, threadPool);

        // 设置高级接口的配置项
        // 分块上传阈值和分块大小分别为 5MB 和 1MB
        TransferManagerConfiguration transferManagerConfiguration = new TransferManagerConfiguration();
        transferManagerConfiguration.setMultipartUploadThreshold(5*1024*1024);
        transferManagerConfiguration.setMinimumUploadPartSize(1*1024*1024);
        transferManager.setConfiguration(transferManagerConfiguration);

        return transferManager;
    }
    /**
    *关闭 TransferManager
     * 在确定不再通过 TransferManager 的实例调用高级接口之后,一定要关闭这个实例,防止资源泄露。
    * ***/
    public static void shutdownTransferManager(TransferManager transferManager) {
        // 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。
        // 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。
        transferManager.shutdownNow(Boolean.TRUE);
    }
    /**
     *
     * 文件上传
     *bucketName 桶名称 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
     * File 本地文件路径
     * key 对象键(Key)是对象在存储桶中的唯一标识。
     * */
    // 上传对象
    public static Upload upload(String bucketName,String key,String localFilePath) throws CosServiceException, CosClientException, InterruptedException {
        // 使用高级接口必须先保证本进程存在一个 TransferManager 实例,如果没有则创建
        final COSClient cosClient = teanstreUtil.getCosClient();
        // 详细代码参见本页:高级接口 -> 创建 TransferManager
        final TransferManager transferManager = teanstreUtil.createTransferManager(cosClient);
        File localFile = new File(localFilePath);
        //创建对象
        final PutObjectRequest putObjectRequest1 = new PutObjectRequest(bucketName, key, localFile);
        // 高级接口会返回一个异步结果Upload
            // 可同步地调用 waitForUploadResult 方法等待上传完成,成功返回UploadResult, 失败抛出异常
            Upload upload = transferManager.upload(putObjectRequest1);
            UploadResult uploadResult = upload.waitForUploadResult();
// 确定本进程不再使用 transferManager 实例之后,关闭之
// 详细代码参见本页:高级接口 -> 关闭 TransferManager
       teanstreUtil.shutdownTransferManager(transferManager);
        return upload;
    };
   /***
    * bucketName 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    * String key上传的文件名称标识 唯一标识
    * 使用流的形式上传
    * */
    // 上传对象
    public static Upload uploads(String bucketName,String key,InputStream inputStream) throws CosServiceException, CosClientException{
        // 使用高级接口必须先保证本进程存在一个 TransferManager 实例,如果没有则创建
        final COSClient cosClient = teanstreUtil.getCosClient();
        // 详细代码参见本页:高级接口 -> 创建 TransferManager
        TransferManager transferManager = createTransferManager(cosClient);

        // 这里创建一个 ByteArrayInputStream 来作为示例,实际中这里应该是您要上传的 InputStream 类型的流


        ObjectMetadata objectMetadata = new ObjectMetadata();
// 上传的流如果能够获取准确的流长度,则推荐一定填写 content-length
// 如果确实没办法获取到,则下面这行可以省略,但同时高级接口也没办法使用分块上传了
    /*    objectMetadata.setContentLength(inputStreamLength);*/

        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream, objectMetadata);
        Upload upload=null;
        try {
            // 高级接口会返回一个异步结果Upload
            // 可同步地调用 waitForUploadResult 方法等待上传完成,成功返回UploadResult, 失败抛出异常
             upload = transferManager.upload(putObjectRequest);
            UploadResult uploadResult = upload.waitForUploadResult();
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        teanstreUtil.shutdownTransferManager(transferManager);

        return upload;
    };
//上传本地目录
    /**
     * bucketName // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
     *virtualDirectoryKeyPrefix // 设置文件上传到 bucket 之后的前缀目录,设置为 “”,表示上传到 bucket 的根目录
     * directory 本地路径 // 要上传的文件夹的绝对路径
     * includeSubdirectories // 是否递归上传目录下的子目录,如果是 true,子目录下的文件也会上传,且cos上会保持目录结构
     * */
//TransferManager 实例封装了从本地一个目录来读取文件并且上传到 COS 的功能,这个功能可以在不破坏目录结构的情况下,将文件上传。同时,也可以指定将目录下的文件上传到另一个目录。
public static MultipleFileUpload uploadDirectory(String bucketName, String virtualDirectoryKeyPrefix,
                                          File directory, boolean includeSubdirectories){
    final COSClient cosClient = teanstreUtil.getCosClient();
    TransferManager transferManager = createTransferManager(cosClient);

    MultipleFileUpload upload=null;
    try {
        // 返回一个异步结果Upload, 可同步的调用waitForUploadResult等待upload结束, 成功返回UploadResult, 失败抛出异常.
         upload = transferManager.uploadDirectory(bucketName, virtualDirectoryKeyPrefix, directory, includeSubdirectories);
        // 或者阻塞等待完成
        upload.waitForCompletion();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    teanstreUtil.shutdownTransferManager(transferManager);
    return upload;
};


    public static void main(String[] args) throws InterruptedException, FileNotFoundException {

teanstreUtil.uploadDirectory("ems-1311510668","preif",new File("D:\\text"),Boolean.TRUE);
    }


}

 cos下载对象操作

package com.baidu.util;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.demo.BucketRefererDemo;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.COSObject;
import com.qcloud.cos.model.COSObjectInputStream;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.Download;
import com.qcloud.cos.transfer.MultipleFileDownload;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.utils.IOUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import static com.baidu.config.configuration.secretId;
import static com.baidu.config.configuration.*;
import static com.qcloud.cos.demo.BucketRefererDemo.cosClient;

public class cosDowbloadUtil {
    // 创建 COSClient 实例,这个实例用来后续调用请求
public static COSClient createCOSClient() {
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);

        // ClientConfig 中包含了后续请求 COS 的客户端设置:
        ClientConfig clientConfig = new ClientConfig();

        // 设置 bucket 的地域
        // COS_REGION 请参照 https://cloud.tencent.com/document/product/436/6224
        clientConfig.setRegion(new Region("ap-beijing"));

        // 设置请求协议, http 或者 https
        // 5.6.53 及更低的版本,建议设置使用 https 协议
        // 5.6.54 及更高版本,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);

        // 以下的设置,是可选的:

        // 设置 socket 读取超时,默认 30s
        clientConfig.setSocketTimeout(30*1000);
        // 设置建立连接超时,默认 30s
        clientConfig.setConnectionTimeout(30*1000);

        // 如果需要的话,设置 http 代理,ip 以及 port
      /*  clientConfig.setHttpProxyIp("httpProxyIp");
        clientConfig.setHttpProxyPort(80);*/
        // 生成 cos 客户端。
        return new COSClient(cred, clientConfig);
    }

    // 创建 TransferManager 实例,这个实例用来后续调用高级接口
public static TransferManager createTransferManager(){
      // 创建一个 COSClient 实例,这是访问 COS 服务的基础实例。
      // 详细代码参见本页: 简单操作 -> 创建 COSClient
     COSClient cosClient = cosDowbloadUtil.createCOSClient();
    // 自定义线程池大小,建议在客户端与 COS 网络充足(例如使用腾讯云的 CVM,同地域上传 COS)的情况下,设置成16或32即可,可较充分的利用网络资源
      // 对于使用公网传输且网络带宽质量不高的情况,建议减小该值,避免因网速过慢,造成请求超时。
      ExecutorService threadPool = Executors.newFixedThreadPool(32);
      // 传入一个 threadpool, 若不传入线程池,默认 TransferManager 中会生成一个单线程的线程池。
      TransferManager transferManager = new TransferManager(cosClient, threadPool);
      return transferManager;
  }

/*    // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String bucketName = "examplebucket-1250000000";
    // 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://cloud.tencent.com/document/product/436/13324)
    String key = "exampleobject";*/
    public static Download download(String bucketName,String key,  String localFilePath){
        // 使用高级接口必须先保证本进程存在一个 TransferManager 实例,如果没有则创建
// 详细代码参见本页:高级接口 -> 创建 TransferManager
        final TransferManager transferManager = cosDowbloadUtil.createTransferManager();
        //本地存储路径
        File downloadFile = new File(localFilePath);
        Download download=null;
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        try {
            // 返回一个异步结果 Donload, 可同步的调用 waitForCompletion 等待下载结束, 成功返回 void, 失败抛出异常
             download = transferManager.download(getObjectRequest, downloadFile);
            download.waitForCompletion();
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

// 确定本进程不再使用 transferManager 实例之后,关闭之
// 详细代码参见本页:高级接口 -> 关闭 TransferManager
        cosDowbloadUtil.shutdownTransferManager(transferManager);
        return download;
    };

   public static void shutdownTransferManager(TransferManager transferManager) {
        // 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。
        // 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。
        transferManager.shutdownNow(true);
    }
    /**
     * 断点下载对象利用了分 range 多线程同时下载的方式下载对象,并在完成之后做完整性校验。如果下载过程中出现异常中断,重新下载时不会下载已经下载过的 range (源文件如果在重启前被修改,则会从头下载)。
     * 适合大文件下载。
     * */
    public static Download downloads(String bucketName,String key,String localFilePath,
                             boolean resumableDownload){
                            // 使用高级接口必须先保证本进程存在一个 TransferManager 实例,如果没有则创建
                            // 详细代码参见本页:高级接口 -> 创建 TransferManager
         TransferManager transferManager = cosDowbloadUtil.createTransferManager();
        File downloadFile = new File(localFilePath);
        Download download=null;
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        try {
            // 返回一个异步结果 Donload, 可同步的调用 waitForCompletion 等待下载结束, 成功返回 void, 失败抛出异常
             download = transferManager.download(getObjectRequest, downloadFile, resumableDownload);
            download.waitForCompletion();
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        cosDowbloadUtil.shutdownTransferManager(transferManager);
        return download;
    };
    /**
     * 下载到目录
     * // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
     *  @String bucketName = "examplebucket-1250000000";
     *         // 设置要下载的对象的前缀(相当于cos上的一个目录),如果设置成 "",则下载整个 bucket。
     *         String cos_path = "/prefix";
     *         // 要保存下载的文件的文件夹的绝对路径
     *         String dir_path = "/to/mydir";
     * */
    public static MultipleFileDownload downloadDirectory(String bucketName, String cos_path,String dir_path
                                                  ) {
// 使用高级接口必须先保证本进程存在一个 TransferManager 实例,如果没有则创建
// 详细代码参见本页:高级接口 -> 示例代码:创建 TransferManager
         TransferManager transferManager = cosDowbloadUtil.createTransferManager();
        MultipleFileDownload download=null;
        try {
            // 返回一个异步结果download, 可同步的调用waitForUploadResult等待download结束.
             download = transferManager.downloadDirectory(bucketName, cos_path, new File(dir_path));
            // 或者阻塞等待完成
            download.waitForCompletion();

            System.out.println("download directory done.");
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

// 确定本进程不再使用 transferManager 实例之后,关闭之
// 详细代码参见本页:高级接口 -> 示例代码:关闭 TransferManager
        cosDowbloadUtil.shutdownTransferManager(transferManager);
        return download;
    }


    public static void main(String[] args) {
        //cosDowbloadUtil.download("ems-1311510668","rizhi.png","D:\\360"+"\\"+"rizhi.png");
cosDowbloadUtil.downloadDirectory("ems-1311510668","/preif","D:\\360");
    }
    public static Boolean shangchuan(MultipartFile multipartFile){
       // multipartFile.transferTo(new File(realPath,aa.getOriginalFilename()));//文件上传
       return Boolean.TRUE;
    }

}

 列出cos对象

package com.baidu.util;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.COSObjectSummary;
import com.qcloud.cos.model.ListObjectsRequest;
import com.qcloud.cos.model.ObjectListing;
import com.qcloud.cos.region.Region;

import java.util.List;

import static com.baidu.config.configuration.*;
/**
 * 列出当前对象**/
public class cosLikeUtil {
    // 创建 COSClient 实例,这个实例用来后续调用请求
  public static   COSClient createCOSClient() {
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);

        // ClientConfig 中包含了后续请求 COS 的客户端设置:
        ClientConfig clientConfig = new ClientConfig();

        // 设置 bucket 的地域
        // COS_REGION 请参照 https://cloud.tencent.com/document/product/436/6224
        clientConfig.setRegion(new Region(REGIONID));

        // 设置请求协议, http 或者 https
        // 5.6.53 及更低的版本,建议设置使用 https 协议
        // 5.6.54 及更高版本,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);

        // 以下的设置,是可选的:

        // 设置 socket 读取超时,默认 30s
        clientConfig.setSocketTimeout(30*1000);
        // 设置建立连接超时,默认 30s
        clientConfig.setConnectionTimeout(30*1000);

   /*     // 如果需要的话,设置 http 代理,ip 以及 port
        clientConfig.setHttpProxyIp("httpProxyIp");
        clientConfig.setHttpProxyPort(80);*/

        // 生成 cos 客户端。
        return new COSClient(cred, clientConfig);
    }

   /** // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String bucketName = "examplebucket-1250000000";
    如果没有就穿空字符串 ""
    **/

    public static ObjectListing listObjects(String bucketName,String prefix) throws CosClientException, CosServiceException{
        // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
         COSClient cosClient = cosLikeUtil.createCOSClient();

        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
// 设置 bucket 名称
        listObjectsRequest.setBucketName(bucketName);
// 设置列出的对象名以 prefix 为前缀
        listObjectsRequest.setPrefix(prefix);
// 设置最大列出多少个对象, 一次 listobject 最大支持1000
        listObjectsRequest.setMaxKeys(1000);

// 保存列出的结果
        ObjectListing objectListing = null;

        try {
            objectListing = cosClient.listObjects(listObjectsRequest);
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        }
// 确认本进程不再使用 cosClient 实例之后,关闭之
        cosClient.shutdown();
        return objectListing;
    };

    public static void main(String[] args) {
        final ObjectListing objectListing = cosLikeUtil.listObjects("ems-1311510668", "");
        objectListing.getObjectSummaries().forEach(cosObjectSummary -> {
            // 对象的 key
            String key = cosObjectSummary.getKey();
            // 对象的etag
            String etag = cosObjectSummary.getETag();
            // 对象的长度
            long fileSize = cosObjectSummary.getSize();
            // 对象的存储类型
            String storageClasses = cosObjectSummary.getStorageClass();
            System.out.println(key);
            System.out.println(etag);
            System.out.println(fileSize);
            System.out.println(storageClasses);
        });

        if (objectListing.isTruncated()) {
            // 表示还没有列完,被截断了

            // 下一次开始的位置
            String nextMarker = objectListing.getNextMarker();
        }

    }
}

删除对象



import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.exception.MultiObjectDeleteException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;

import java.util.ArrayList;
import java.util.List;

import static com.baidu.config.configuration.*;

public class cosDelectUtil {
    //创建 COSClient
    // 创建 COSClient 实例,这个实例用来后续调用请求
public static COSClient createCOSClient() {
        // 设置用户身份信息。
        // SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // ClientConfig 中包含了后续请求 COS 的客户端设置:
        ClientConfig clientConfig = new ClientConfig();
        // 设置 bucket 的地域
        // COS_REGION 请参照 https://cloud.tencent.com/document/product/436/6224
        clientConfig.setRegion(new Region(REGIONID));
        // 设置请求协议, http 或者 https
        // 5.6.53 及更低的版本,建议设置使用 https 协议
        // 5.6.54 及更高版本,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 以下的设置,是可选的:
        // 设置 socket 读取超时,默认 30s
        clientConfig.setSocketTimeout(30*1000);
        // 设置建立连接超时,默认 30s
        clientConfig.setConnectionTimeout(30*1000);
        // 如果需要的话,设置 http 代理,ip 以及 port
  /*      clientConfig.setHttpProxyIp("httpProxyIp");
        clientConfig.setHttpProxyPort(80);*/
        // 生成 cos 客户端。
        return new COSClient(cred, clientConfig);
    }
 //删除对象
    /***
     * @param bucketName 桶名称
     * @param key 文件名称
     * */
public static void deleteObject(String bucketName, String key) throws CosClientException, CosServiceException{
     // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
     COSClient cosClient = cosDelectUtil.createCOSClient();
// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
     String bucketNames = bucketName+"-"+APPID;
// 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://cloud.tencent.com/document/product/436/13324)
     try {
         cosClient.deleteObject(bucketNames, key);
     } catch (CosServiceException e) {
         e.printStackTrace();
     } catch (CosClientException e) {
         e.printStackTrace();
     }

// 确认本进程不再使用 cosClient 实例之后,关闭之
     cosClient.shutdown();
 }
//批量删除对象
public static DeleteObjectsResult deleteObjects(String bucketName,ArrayList<DeleteObjectsRequest.KeyVersion> list) throws MultiObjectDeleteException, CosClientException, CosServiceException{
    // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
    COSClient cosClient = cosDelectUtil.createCOSClient();

// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String bucketNames = bucketName+"-"+APPID;

    DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketNames);
    deleteObjectsRequest.setKeys(list);
    DeleteObjectsResult deleteObjectsResult=null;
    try {
         deleteObjectsResult = cosClient.deleteObjects(deleteObjectsRequest);
        List<DeleteObjectsResult.DeletedObject> deleteObjectResultArray = deleteObjectsResult.getDeletedObjects();
    } catch (MultiObjectDeleteException mde) {
        // 如果部分删除成功部分失败, 返回 MultiObjectDeleteException
        List<DeleteObjectsResult.DeletedObject> deleteObjects = mde.getDeletedObjects();
        List<MultiObjectDeleteException.DeleteError> deleteErrors = mde.getErrors();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    }
    // 确认本进程不再使用 cosClient 实例之后,关闭之
    cosClient.shutdown();
return  deleteObjectsResult;
}
//删除目录
    /***
     * @param bucketName 桶名称
     * @param delDir 目录名称
     * */
public static void delemkidr(String bucketName,String delDir){
// 列目录实现参考:列出对象 -> 简单操作 -> 列出目录下的对象和子目录
// 批量删除实现参考本页:批量删除对象
    final StringBuilder stringBuilder = new StringBuilder();
          stringBuilder.append(bucketName);
          stringBuilder.append("-");
          stringBuilder.append(APPID);
// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
    COSClient cosClient = cosDelectUtil.createCOSClient();
    ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
// 设置 bucket 名称
    listObjectsRequest.setBucketName(stringBuilder.toString());
// prefix 表示列出的对象名以 prefix 为前缀
// 这里填要列出的目录的相对 bucket 的路径
    listObjectsRequest.setPrefix(delDir);
// 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
    listObjectsRequest.setMaxKeys(1000);
// 保存每次列出的结果
    ObjectListing objectListing = null;
    do {
        try {
            objectListing = cosClient.listObjects(listObjectsRequest);
        } catch (CosServiceException e) {
            e.printStackTrace();
            return;
        } catch (CosClientException e) {
            e.printStackTrace();
            return;
        }

        // 这里保存列出的对象列表
        List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();

        ArrayList<DeleteObjectsRequest.KeyVersion> delObjects = new ArrayList<DeleteObjectsRequest.KeyVersion>();

        for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
            delObjects.add(new DeleteObjectsRequest.KeyVersion(cosObjectSummary.getKey()));
        }

        DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);

        deleteObjectsRequest.setKeys(delObjects);

        try {
            DeleteObjectsResult deleteObjectsResult = cosClient.deleteObjects(deleteObjectsRequest);
            List<DeleteObjectsResult.DeletedObject> deleteObjectResultArray = deleteObjectsResult.getDeletedObjects();
        } catch (MultiObjectDeleteException mde) {
            // 如果部分删除成功部分失败, 返回 MultiObjectDeleteException
            List<DeleteObjectsResult.DeletedObject> deleteObjects = mde.getDeletedObjects();
            List<MultiObjectDeleteException.DeleteError> deleteErrors = mde.getErrors();
        } catch (CosServiceException e) {
            e.printStackTrace();
            return;
        } catch (CosClientException e) {
            e.printStackTrace();
            return;
        }

        // 标记下一次开始的位置
        String nextMarker = objectListing.getNextMarker();
        listObjectsRequest.setMarker(nextMarker);
    } while (objectListing.isTruncated());
    }
    public static void main(String[] args) {
    cosDelectUtil.delemkidr("ems","preif");

    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

腾讯云存储COS 的相关文章

随机推荐

  • Mysql根据拼音首字母分组和排序

    最近业务上有个需求 需要根据英文字母展示对应的人名 和我们手机的通讯录差不多 如下图所示 通常如果表设计的时候增加了对应的首字母字段应该很好实现 那如果没加 应该怎么实现呢 图示Sql SELECT name ELT INTERVAL CO
  • Java FileOutputStream类

    文章目录 总结 FileOutputStream类数据结构 FileOutputStream类方法 构造方法 操作方法 总结 FileOutputStream类用于将数据写入文件或文件描述符的输出流 FileOutputStream用于写入
  • 如何查看局域网内所有IP

    要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤 第一步 点击电脑左下角的 开始 然后再点击 运行 第二步 在运行窗口里填入 cmd 然后点击确定 第三步 在cmd命令窗口输入 ipconfig ALL 命令 点击键盘上的回车键 第
  • 2021年字节跳动+京东+美团面试总结!内含福利

    开篇 说一下我大概的情况 渣本毕业 工作已经有快3年了 从高中就开始玩小破站 无论是学习还是日常放松都是在b站 大学主学的软件技术专业 所以 入职bilibili是我大学时期给自己定的小目标 在学校 专业学的算中上的水平 课本知识和老师讲的
  • delphi with do和for do语句

    1 with 对象名 do语句只是为了减少输入的字符 不必每次重复名字 直接写变量 procedure TForm1 Button1Click Sender TObject 正常写法beginedit1 text hello edit1 c
  • J1939协议与CAN2.0对应关系

  • python贪吃蛇小游戏,面向对象设计模式,附带源码以及所需素材

    在python中通过面向对象设计模式来实现一个贪吃蛇小游戏 源码在最下方 上传的资源包内也包括代码源文件以及所需素材等 源文件在game文件夹内 exe文件可直接运行 pygame模块需要自行下载 先来看运行效果图 开始界面 点击按钮开始游
  • Leetcode 括号的分数 -- 栈

    题目描述 leetcode 856 括号的分数 给定一个平衡括号字符串 S 按下述规则计算该字符串的分数 得 1 分 AB 得 A B 分 其中 A 和 B 是平衡括号字符串 A 得 2 A 分 其中 A 是平衡括号字符串 示例 1 输入
  • Go语言学习18-基准测试

    基准测试 引言 基准测试 1 编写基准测试函数 2 计时器 3 内存分配统计 4 基准测试的运行 结语 引言 所谓基准测试 Benchmark Test 简称BMT 是指 通过一些科学的手段实现对一类测试对象的某项性能指标进行可测量 可重复
  • 嵌入式 Linux 入门(七、Linux 下的环境变量)

    嵌入式 Linux 入门第七课 学习理解 linux 的环境变量 矜辰所致 前言 学习完 Linux 的 Shell 命令 和 Shell 脚本 我们还需要理解一个东西 环境变量 理解了 Linux 的环境变量 前面的文章中有些细节的东西
  • OpenCASCADE:使用C#演示的实例

    OpenCASCADE 使用C 演示的实例 OpenCASCADE是一个开源的三维几何建模软件库 它支持多种语言接口 其中 OCCT是OpenCASCADE的C 语言封装 而在本文中 我们将介绍如何使用C 语言来调用OCCT的API 在Vi
  • Mac安装SecureCRT

    踩了很多坑 主要过程 第一次 在之前常用的一个mac软件福利网站https xclient info s securecrt html下载之后发现没有破解文件securecrt mac crack pl 第二次 在csdn上模仿下载之后进行
  • SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

    场景 设计模式 策略模式在Java中的使用示例 设计模式 策略模式在Java中的使用示例 java 策略模式示例 霸道流氓气质的博客 CSDN博客 上面讲了策略模式在Java中的使用示例 下面看一个在SpringBoot中的实际使用示例 业
  • 实时监听EditText内容变化,修改监听软键盘

    主要是addTextChangedListener方法的使用 aswerEdittext addTextChangedListener new TextWatcher 编辑框的内容发生改变之前的回调方法 Override public vo
  • 浅谈设计原则

    1单一职责原则 什么是单一职责原则 在我理解看来就是一个东西如果发生问题那么就有且仅有一个原因导致它发生问题 它的准确解释就是 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于耦合度加大 当变化发生时 设计会受到
  • JAVA-1001. 害死人不偿命的(3n+1)猜想

    卡拉兹 Callatz 猜想 对任何一个自然数n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到n 1 卡拉兹在1950年的世界数学家大会上公布了这个猜想 传说当时耶鲁大学
  • CentOS安装指定版本的Docker(包括卸载)

    一 Docker安装 1 配置指定的yum源 wget P etc yum repos d https mirrors aliyun com docker ce linux centos docker ce repo 2 查看yum源支持的
  • React使用antd里面的Table组件,表格可自由控制列宽

    import React Component from react import Resizable from react resizable import react resizable css styles css 要引入样式 impo
  • 到底学机械好还是学计算机好,大学同学一个选择学机械,另一个学计算机,对比5年后收入蒙了...

    原标题 大学同学一个选择学机械 另一个学计算机 对比5年后收入蒙了 现如今上大学 你所选择的专业对以后的职业规划还是有挺大的影响 而互联网可以说是这些年最热门的专业 所以很多大学生选择学计算机还是挺多的 基本上计算机系的大学生也是最多的 而
  • 腾讯云存储COS

    简介 对象存储 Cloud Object Storage COS 是由腾讯云推出的无目录层次结构 无数据格式限制 可容纳海量数据且支持 HTTP HTTPS 协议访问的分布式存储服务 腾讯云 COS 的存储桶空间无容量上限 无需分区管理 适