tencent cloud

文档反馈

修改对象元数据

最后更新时间:2022-03-04 09:47:43

    简介

    本文档提供关于修改对象元数据的 SDK 示例代码。

    修改对象元数据利用了复制对象的接口,在复制过程中设置新的元数据。

    API 操作名 操作描述
    PUT Object - Copy 对象复制 复制文件到目标路径

    简单操作

    简单操作由 COSClient 类型发起请求,使用简单操作之前必须先创建一个 COSClient 实例。

    COSClient 实例是并发安全的,这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。

    创建 COSClient

    调用 COS 的接口之前,必须先创建一个 COSClient 的实例。

    // 创建 COSClient 实例,这个实例用来后续调用请求
    COSClient createCOSClient() {
      // 设置用户身份信息。
      // SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
      String secretId = "SECRETID";
      String secretKey = "SECRETKEY";
      COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
       // ClientConfig 中包含了后续请求 COS 的客户端设置:
      ClientConfig clientConfig = new ClientConfig();
       // 设置 bucket 的地域
      // COS_REGION 请参照 https://intl.cloud.tencent.com/document/product/436/6224
      clientConfig.setRegion(new Region("COS_REGION"));
       // 设置请求协议, 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);
    }
    

    使用临时密钥创建 COSClient

    如果要使用临时密钥请求 COS,则需要用临时密钥创建 COSClient。
    本 SDK 并不能生成临时密钥,而需要使用额外的操作来生成,参考 临时密钥生成

    // 创建 COSClient 实例,这个实例用来后续调用请求
    COSClient createCOSClient() {
      // 这里需要已经获取到临时密钥的结果。
      // 临时密钥的生成参考 https://intl.cloud.tencent.com/document/product/436/14048
      String tmpSecretId = "TMPSECRETID";
      String tmpSecretKey = "TMPSECRETKEY";
      String sessionToken = "SESSIONTOKEN";
       COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);
       // ClientConfig 中包含了后续请求 COS 的客户端设置:
      ClientConfig clientConfig = new ClientConfig();
       // 设置 bucket 的地域
      // COS_REGION 请参照 https://intl.cloud.tencent.com/document/product/436/6224
      clientConfig.setRegion(new Region("COS_REGION"));
       // 设置请求协议, 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);
    }
    

    修改对象元数据

    使用复制对象接口,在复制过程中设置新的元数据。在复制接口中仅仅修改元数据,不会执行对象数据的复制。

    方法原型

    public CopyObjectResult copyObject(CopyObjectRequest copyObjectRequest)
              throws CosClientException, CosServiceException
    
    

    请求示例

    // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
    // 详细代码参见本页:简单上传 -> 创建 COSClient
    COSClient cosClient = createCOSClient();
    // 桶所在的地域
    // COS_REGION 请参照 https://intl.cloud.tencent.com/document/product/436/6224
    Region region = new Region("ap-beijing");
    // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String bucketName = "examplebucket-1250000000";
    // 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://intl.cloud.tencent.com/document/product/436/13324)
    String key = "exampleobject";
    // 获取当前的对象元数据
    ObjectMetadata objectMetadata = cosclient.getObjectMetadata(bucketName, key);
    // 修改对象元数据必须设置 replaced
    objectMetadata.addUserMetadata("x-cos-metadata-directive", "Replaced");
    // 设置新的对象元数据
    objectMetadata.addUserMetadata("x-cos-storage-class", "STANDARD_IA");
    objectMetadata.setContentType("text/plain");
    CopyObjectRequest copyObjectRequest = new CopyObjectRequest(region, bucketName, key, bucketName, key);
    copyObjectRequest.setNewObjectMetadata(objectMetadata);
    try {
      CopyObjectResult copyObjectResult = cosclient.copyObject(copyObjectRequest);
      System.out.print(copyObjectResult.getRequestId());
    } catch (CosServiceException e) {
      e.printStackTrace();
    } catch (CosClientException e) {
      e.printStackTrace();
    }
    // 确认本进程不再使用 cosClient 实例之后,关闭之
    cosClient.shutdown();
    

    参数说明

    参数名称 描述 类型
    copyObjectRequest 拷贝文件请求 CopyObjectRequest

    Request 成员说明:

    参数名称 描述 类型
    sourceBucketRegion 源 Bucket region。默认值:与当前 clientConfig 的 region 一致,表示同地域拷贝 String
    sourceBucketName 源存储桶名称,命名格式为 BucketName-APPID,详情请参见 命名规范 String
    sourceKey 源对象键,对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg中,对象键为 doc/picture.jpg,详情请参见 对象键 String
    sourceVersionId 源文件 version id(适用于开启了版本控制的源 Bucket)。默认值:源文件当前最新版本 String
    destinationBucketName 目标存储桶名称,Bucket 的命名格式为 BucketName-APPID ,name 由字母数字和中划线构成 String
    destinationKey 目的对象键,对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg中,对象键为 doc/picture.jpg,详情请参见 对象键 String
    storageClass 拷贝的目的文件的存储类型。枚举值:Standard,Standard_IA。默认值:Standard。更多存储类型请参见 存储类型概述 String

    返回结果说明

    • 成功:返回 CopyObjectResult,包含新文件的 Etag 等信息。
    • 失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持