简介
本文档提供关于复制、移动对象的 API 概览以及 SDK 示例代码。
简单操作
API | 操作名 | 操作描述 |
设置对象复制(修改对象属性) | 复制文件到目标路径 | |
删除单个对象 | 在存储桶中删除指定对象 |
分块操作
API | 操作名 | 操作描述 |
查询分块上传/复制 | 查询正在进行中的分块上传/复制信息 | |
初始化分块上传/复制 | 初始化分块上传/复制操作 | |
复制分块 | 将其他对象复制为一个分块 | |
查询已上传/复制块 | 查询特定分块操作中的已上传/复制的块 | |
完成分块上传/复制 | 完成整个文件的分块上传/复制 | |
终止分块上传/复制 | 终止一个分块操作并删除已上传/复制的块 |
SDK API 参考
复制对象
高级接口封装了简单复制、分块复制接口的异步请求,并支持暂停、恢复以及取消复制请求。
示例代码
// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参见 SDK 接口文档TransferConfig transferConfig = new TransferConfig.Builder().build();//初始化 TransferManagerTransferManager transferManager = new TransferManager(cosXmlService,transferConfig);String sourceBucket = "sourcebucket-1250000000"; //源对象所在的存储桶String sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域String sourceCosPath = "sourceObject"; //源对象的对象键//构造源对象属性CopyObjectRequest.CopySourceStruct copySourceStruct =new CopyObjectRequest.CopySourceStruct(sourceBucket, sourceRegion, sourceCosPath);//目标桶// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucketString bucket = "examplebucket-1250000000";//目标对象String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即对象键//复制对象COSXMLCopyTask cosxmlCopyTask = transferManager.copy(bucket, cosPath,copySourceStruct);//设置返回结果回调cosxmlCopyTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {COSXMLCopyTask.COSXMLCopyTaskResult copyResult =(COSXMLCopyTask.COSXMLCopyTaskResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest request,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//设置任务状态回调, 可以查看任务过程cosxmlCopyTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
说明:
移动对象
移动对象主要包括两个操作:复制源对象到目标位置,删除源对象。
由于 COS 通过存储桶名称(Bucket)和对象键(ObjectKey)来标识对象。移动对象也就意味着修改这个对象的标识,COS Java SDK 目前没有提供修改对象唯一标识名的单独接口,但是可以通过组合复制对象加上删除对象的基本操作,来达到修改对象标识的目的,从而实现移动对象。
例如将 mybucket-1250000000 这个存储桶中的 picture.jpg 这个对象移动到同个存储桶的 doc 路径下。首先可以复制 picture.jpg 对象到存储桶的 doc 路径下,即对象键设定为 doc/picture.jpg,复制完成后删除 picture.jpg 这个对象,来实现“移动”的效果。
同样的,如果想将 mybucket-1250000000 这个存储桶里的 picture.jpg 这个对象移动到 myanothorbucket-1250000000 这个存储桶里,可以先将对象复制到 myanothorbucket-1250000000 存储桶,然后删除原来的对象。
示例代码
final String sourceBucket = "sourcebucket-1250000000"; //"源对象所在的存储桶final String sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域final String sourceKey = "sourceObject"; //源对象键//构造源对象属性CopyObjectRequest.CopySourceStruct copySource = new CopyObjectRequest.CopySourceStruct(sourceBucket,sourceRegion, sourceKey);String bucket = "examplebucket-1250000000"; //目标存储桶,格式:BucketName-APPIDString key = "exampleobject"; //目标对象的对象键// copy(String bucket, String cosPath, CopyObjectRequest.CopySourceStruct copySourceStruct){COSXMLCopyTask copyTask = transferManager.copy(bucket, key, copySource);copyTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {try {// 复制成功后删除文件DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(sourceBucket, sourceKey);DeleteObjectResult deleteResult = cosXmlService.deleteObject(deleteObjectRequest);} catch (CosXmlClientException e) {e.printStackTrace();} catch (CosXmlServiceException e) {e.printStackTrace();}}@Overridepublic void onFail(CosXmlRequest request, CosXmlClientException exception, CosXmlServiceException serviceException) {}});
说明:
复制对象(修改属性)
复制文件到目标路径(PUT Object-Copy)。
示例代码一: 复制对象时保留对象属性
String sourceBucket = "sourcebucket-1250000000"; //源对象所在的存储桶String sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域String sourceCosPath = "sourceObject"; //源对象键// 构造源对象属性CopyObjectRequest.CopySourceStruct copySourceStruct =new CopyObjectRequest.CopySourceStruct(sourceBucket, sourceRegion, sourceCosPath);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即对象键CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucket, cosPath,copySourceStruct);cosXmlService.copyObjectAsync(copyObjectRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {CopyObjectResult copyObjectResult = (CopyObjectResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
说明:
示例代码二: 复制对象时替换对象属性
String sourceBucket = "sourcebucket-1250000000"; //源对象所在的存储桶String sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域String sourceCosPath = "sourceObject"; //源对象键// 构造源对象属性CopyObjectRequest.CopySourceStruct copySourceStruct =new CopyObjectRequest.CopySourceStruct(sourceBucket, sourceRegion, sourceCosPath);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即对象键CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucket, cosPath,copySourceStruct);copyObjectRequest.setCopyMetaDataDirective(MetaDataDirective.REPLACED);copyObjectRequest.setXCOSMeta("x-cos-metadata-oldKey", "newValue");cosXmlService.copyObjectAsync(copyObjectRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {CopyObjectResult copyObjectResult = (CopyObjectResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
说明:
示例代码三: 修改对象元数据
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucketString bucket = "examplebucket-1250000000";String region = "COS_REGION"; //源对象的存储桶所在的地域String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即对象键// 构造源对象属性CopyObjectRequest.CopySourceStruct copySourceStruct =new CopyObjectRequest.CopySourceStruct(bucket, region, cosPath);CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucket, cosPath,copySourceStruct);copyObjectRequest.setCopyMetaDataDirective(MetaDataDirective.REPLACED);// 修改元数据为新值copyObjectRequest.setXCOSMeta("x-cos-metadata-oldKey", "newValue");cosXmlService.copyObjectAsync(copyObjectRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {CopyObjectResult copyObjectResult = (CopyObjectResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
说明:
示例代码四: 修改对象存储类型
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucketString bucket = "examplebucket-1250000000";String region = "COS_REGION"; //源对象的存储桶所在的地域String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即对象键// 构造源对象属性CopyObjectRequest.CopySourceStruct copySourceStruct =new CopyObjectRequest.CopySourceStruct(bucket, region, cosPath);CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucket, cosPath,copySourceStruct);// 修改为低频存储copyObjectRequest.setCosStorageClass(COSStorageClass.STANDARD_IA);cosXmlService.copyObjectAsync(copyObjectRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {CopyObjectResult copyObjectResult = (CopyObjectResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
说明: