简介
本文介绍对象存储 COS 通过 Node.js SDK 实现删除对象功能的示例代码和描述。
注意事项
若您使用删除单个对象接口,需要具有目标对象的删除权限:在您进行 授权策略 时,action 需要设置为
cos:DeleteObject
,更多授权请参见 支持CAM的业务接口。若您在匿名访问场景下使用删除多个对象接口,需要具有所有目标对象的删除权限和批删权限:在您进行 授权策略 时,action 需要设置为
cos:DeleteObject
和cos:DeleteMultipleObjects
,更多授权请参见 支持CAM的业务接口。若您在非匿名访问场景下使用删除多个对象接口,需要具有所有目标对象的删除权限:在您进行 授权策略 时,action 需要设置为
cos:DeleteObject
,更多授权请参见 支持CAM的业务接口。前期准备
使用案例
删除单个对象
功能说明
DELETE Object 接口请求可以在 COS 的存储桶中将一个对象(Object)删除。该操作需要请求者对存储桶有 WRITE 权限。
cos.deleteObject({Bucket: 'examplebucket-1250000000', // 填入您自己的存储桶,必须字段Region: 'COS_REGION', // 存储桶所在地域,例如ap-beijing,必须字Key: '1.jpg', // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段}, function(err, data) {console.log(err || data);});
参数说明
回调函数说明
function(err, data) { ... }
参数名 | 参数描述 | 类型 |
err | Object | |
- statusCode | 请求返回的 HTTP 状态码,例如200、403、404等 | Number |
- headers | 请求返回的头部信息 | Object |
data | 请求成功时返回的对象,如果请求发生错误,则为空 | Object |
- statusCode | 请求返回的 HTTP 状态码,例如200,204,403,404等,如果删除成功或者文件不存在则返回204或200,如果找不到指定的 Bucket,则返回404 | Number |
- headers | 请求返回的头部信息 | Object |
- DeleteMarker | 当使用 versionId 请求参数指定删除标记的版本 ID 时,返回值为 'true',代表删除的版本 ID 对应的是一个删除标记 当未使用 versionId 请求参数,且指定对象所在的存储桶启用了版本控制时,返回值为 'true',代表该删除请求创建了一个删除标记作为对象的最新版本 | String |
删除多个对象
功能说明
DELETE Multiple Objects 接口请求实现在指定存储桶中批量删除对象,单次请求最大支持批量删除1000个对象。对于响应结果,COS 提供 Verbose 和 Quiet 两种模式: Verbose 模式将返回每个对象的删除结果,Quiet 模式只返回报错的对象信息。
cos.deleteMultipleObject({Bucket: 'examplebucket-1250000000', // 填入您自己的存储桶,必须字段Region: 'COS_REGION', // 存储桶所在地域,例如ap-beijing,必须字段Objects: [{ Key: '1.jpg' }, // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段{ Key: '2.txt' }, // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段]}, function(err, data) {console.log(err || data);});
参数说明
参数名 | 参数描述 | 类型 | 是否必填 |
Bucket | 存储桶的名称,命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式 | String | 是 |
Region | String | 是 | |
Quiet | 布尔值,这个值决定了是否启动 Quiet 模式。值为 true 启动 Quiet 模式,值为 false 则启动 Verbose 模式,默认值为 false | Boolean | 否 |
Objects | 要删除的对象列表 | ObjectArray | 是 |
- Key | String | 是 | |
- VersionId | 要删除的对象版本 ID 或 DeleteMarker 版本 ID | String | 否 |
回调函数说明
function(err, data) { ... }
参数名 | 参数描述 | 类型 |
err | Object | |
- statusCode | 请求返回的 HTTP 状态码,例如200,204,403,404等 | Number |
- headers | 请求返回的头部信息 | Object |
data | 请求成功时返回的对象,如果请求发生错误,则为空 | Object |
- statusCode | 请求返回的 HTTP 状态码,例如200,204,403,404等 | Number |
- headers | 请求返回的头部信息 | Object |
- Deleted | 说明本次删除成功的对象信息列表 | ObjectArray |
- - Key | String | |
- - VersionId | 如果参数传入了 VersionId,返回也会带上 VersionId,表示刚操作的对象版本或 DeleteMarker 版本 | String |
- - DeleteMarker | 如果开启了版本控制,并且参数没有 VersionId,本次删除不会真正抹去文件内容,只新增一个 DeleteMarker 代表可见的文件已删除,枚举值:true、false | String |
- - DeleteMarkerVersionId | 当返回的 DeleteMarker 为 true 时,返回刚新增的 DeleteMarker 的 VersionId | String |
- Error | 说明本次删除失败的对象信息列表 | ObjectArray |
- - Key | String | |
- - Code | 删除失败的错误码 | String |
- - Message | 删除错误信息 | String |
按前缀删除多个对象(删除指定目录a下的文件)
功能说明
DELETE Multiple Objects 接口请求实现在指定存储桶中批量删除对象,单次请求最大支持批量删除1000个对象。对于响应结果,COS 提供 Verbose 和 Quiet 两种模式: Verbose 模式将返回每个对象的删除结果,Quiet 模式只返回报错的对象信息。
const deleteFiles = function (marker) {cos.getBucket({Bucket: 'examplebucket-1250000000', // 填入您自己的存储桶,必须字段Region: 'COS_REGION', // 存储桶所在地域,例如ap-beijing,必须字段Prefix: 'a/', // 指定拉取前缀(目录)aMarker: marker,MaxKeys: 1000,}, function (listError, listResult) {if (listError) return console.log('list error:', listError);const nextMarker = listResult.NextMarker;const objects = listResult.Contents.map(function (item) {return {Key: item.Key}});cos.deleteMultipleObject({Bucket: bucket,Region: region,Objects: objects,}, function (delError, deleteResult) {if (delError) {console.log('delete error', delError);console.log('delete stop');} else {console.log('delete result', deleteResult);if (listResult.IsTruncated === 'true') deleteFiles(nextMarker);else console.log('delete complete');}});});}deleteFiles();
参数说明
参数名 | 参数描述 | 类型 | 是否必填 |
Bucket | 存储桶的名称,命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式 | String | 是 |
Region | String | 是 | |
Quiet | 布尔值,这个值决定了是否启动 Quiet 模式。值为 true 启动 Quiet 模式,值为 false 则启动 Verbose 模式,默认值为 false | Boolean | 否 |
Objects | 要删除的对象列表 | ObjectArray | 是 |
- Key | String | 是 | |
- VersionId | 要删除的对象版本 ID 或 DeleteMarker 版本 ID | String | 否 |
回调函数说明
function(err, data) { ... }
参数名 | 参数描述 | 类型 |
err | Object | |
- statusCode | 请求返回的 HTTP 状态码,例如200,204,403,404等 | Number |
- headers | 请求返回的头部信息 | Object |
data | 请求成功时返回的对象,如果请求发生错误,则为空 | Object |
- statusCode | 请求返回的 HTTP 状态码,例如200,204,403,404等 | Number |
- headers | 请求返回的头部信息 | Object |
- Deleted | 说明本次删除成功的对象信息列表 | ObjectArray |
- - Key | String | |
- - VersionId | 如果参数传入了 VersionId,返回也会带上 VersionId,表示刚操作的对象版本或 DeleteMarker 版本 | String |
- - DeleteMarker | 如果开启了版本控制,并且参数没有 VersionId,本次删除不会真正抹去文件内容,只新增一个 DeleteMarker 代表可见的文件已删除,枚举值:true、false | String |
- - DeleteMarkerVersionId | 当返回的 DeleteMarker 为 true 时,返回刚新增的 DeleteMarker 的 VersionId | String |
- Error | 说明本次删除失败的对象信息列表 | ObjectArray |
- - Key | String | |
- - Code | 删除失败的错误码 | String |
- - Message | 删除错误信息 | String |
API 操作
关于删除单个对象的 API 接口说明,请参见 DELETE Object 文档。
关于删除多个对象的 API 接口说明,请参见 DELETE Multiple Objects 文档。