本文介绍如何在受版本控制的存储空间(Bucket)中删除单个或多个文件(Object))以及指定前缀的(Prefix)的文件。
版本控制下的删除行为
版本控制下的删除行为说明如下:
- 未指定versionId(临时删除):
如果在未指定versionId的情况下执行删除操作时,默认不会删除Object的当前版本,而是对当前版本插入删除标记(Delete Marker)。当执行GetObject操作时,OSS会检测到当前版本为删除标记,并返回
404 Not Found
。此外,响应中会返回header:x-oss-delete-marker = true
以及新生成的删除标记的版本号x-oss-version-id
。x-oss-delete-marker
的值为true,表示与返回的x-oss-version-id
对应的版本为删除标记。 - 指定versionId(永久删除):
如果在指定versionId的情况下执行删除操作时,OSS会根据
params
中指定的versionId
参数永久删除该版本。如果要删除ID为“null”的版本,请在params
参数中添加params['versionId'] = “null”
,OSS将“null”字符串当成“null”的versionId,从而删除versionId为“null”的Object。
删除单个文件
以下提供了永久删除及临时删除单个Object的示例。
- 永久删除
以下代码用于指定versionId对Object进行永久删除:
const OSS = require('ali-oss'); const client = new OSS({ bucket: '<Your BucketName>', // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。 region: '<Your Region>', // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>' }); // 删除指定versionId的Object。 const versionId = 'your versionId'; async function deleteVersionObject() { const result = await client.delete(obj.name, { versionId }); } deleteVersionObject();
- 临时删除
以下代码用于不指定versionId对Object进行临时删除:
const OSS = require('ali-oss'); const client = new OSS({ bucket: '<Your BucketName>', // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。 region: '<Your Region>', // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>' }); // 不指定versionId对Object进行临时删除,此操作会为Object添加删除标记。 async function deleteObject() { const result = await client.delete(obj.name); } deleteObject();
删除单个文件的详细信息请参见DeleteObject。
删除多个文件
以下提供了永久删除以及临时删除多个Object的示例。
- 永久删除
以下代码用于指定versionId对多个Object及删除标记进行永久删除:
const OSS = require('ali-oss'); const client = new OSS({ bucket: '<Your BucketName>', // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。 region: '<Your Region>', // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>' }); // 删除多个指定versionId的Object,或删除指定versionId的删除标记关联的Object。 const names = [ { key: 'key1.js', versionId: 'versionId1' }, { key: 'key2.js', versionId: 'versionId2' } ]; async function deleteMulti() { const result = await client.deleteMulti(names); console.log(result); } deleteMulti();
删除多个文件的详细信息请参见DeleteMultipleObjects。
- 临时删除
以下代码用于不指定versionId对多个Object进行临时删除:
const OSS = require('ali-oss'); const client = new OSS({ bucket: '<Your BucketName>', // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。 region: '<Your Region>', // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>' }); const names = ['key1.js', 'key2.js']; async function deleteMulti() { // 不指定versionId删除多个Object。 const result = await client.deleteMulti(names); console.log(result); } deleteMulti();
删除指定前缀的文件
以下代码用于删除指定前缀的文件:
const OSS = require('ali-oss');
const client = new OSS({
bucket: '<Your BucketName>',
// region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
region: '<Your Region>',
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>'
});
async function deleteMutiPrefix(prefix) {
// 获取指定前缀的Object的versionId信息。
const list = client.getBucketVersions({
prefix: prefix,
});
list.objects = list.objects || [];
for (let i = 0; i < result.objects.length; i++) {
const obj = result.objects[i];
// 删除指定前缀的Object。
const versionId = obj.versionId;
await client.delete(obj.name, {
versionId
});
}
}
在文档使用中是否遇到以下问题
更多建议
匿名提交