您可以根据需要删除单个文件(Object)、删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。
警告
请您谨慎使用删除操作,文件删除后将无法恢复。
注意事项
- 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见 访问域名和数据中心 。
- 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见 新建OssClient 。
-
要删除文件,您必须具有
oss:DeleteObject
权限。具体操作,请参见 为RAM用户授权自定义的权限策略 。
删除单个文件
以下代码用于删除examplebucket中的 exampleobject.txt 文件。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填写Object完整路径,例如exampleobject.txt。Object完整路径中不能包含Bucket名称。*/
/* 当要删除目录时,请将ObjectName设置为对应的目录名称。如果目录非空,则需要将目录下的所有Object删除后才能删除该目录。*/
std::string ObjectName = "exampleobject.txt";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
DeleteObjectRequest request(BucketName, ObjectName);
/* 删除文件。*/
auto outcome = client.DeleteObject(request);
if (!outcome.isSuccess()) {
/* 异常处理。*/
std::cout << "DeleteObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
批量删除文件
手动删除文件时,每次最多删除1000个文件。您可以删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。
手动删除多个文件时,返回结果包括如下两种模式,默认返回模式为详细模式,请根据实际选择返回模式。
- 详细模式(verbose):返回所有删除的文件列表。
- 简单模式(quiet):只返回删除失败的文件列表。
OSS还支持通过设置生命周期规则来自动删除文件。更多信息,请参见 基于最后一次修改时间的生命周期规则介绍 。
删除指定名称的多个文件
以下代码用于删除指定名称的多个文件。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填写Object完整路径,例如exampleobject.txt。Object完整路径中不能包含Bucket名称。*/
std::string ObjectName = "exampleobject.txt";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
DeleteObjectsRequest request(BucketName);
/* 添加要删除的多个Object完整路径。*/
request.addKey(ObjectName);
/* 删除文件。*/
auto outcome = client.DeleteObjects(request);
if (!outcome.isSuccess()) {
/* 异常处理。*/
std::cout << "DeleteObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
删除指定前缀或目录下的多个文件
以下代码用于删除指定前缀的多个文件或者指定目录(文件夹)及目录下的所有文件。
警告
如果以下示例代码中前缀keyPrefix的值为空字符串或者NULL,将会删除整个Bucket内的所有文件,请谨慎使用。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 如果您需要删除所有前缀为src的文件,则prefix设置为src。设置为src后,所有前缀为src的非目录文件、src目录以及目录下的所有文件均会被删除。。*/
std::string keyPrefix = "src";
/* 如果您仅需要删除src目录及目录下的所有文件,则prefix设置为src/。*/
/* std::string keyPrefix = "src/"; */
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
std::string nextMarker = "";
bool isTruncated = false;
/* 列举文件。*/
ListObjectsRequest request(BucketName);
request.setPrefix(keyPrefix);
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* 异常处理。*/
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
for (const auto& object : outcome.result().ObjectSummarys()) {
DeleteObjectRequest request(BucketName, object.Key());
/* 删除文件。*/
auto delResult = client.DeleteObject(request);
nextMarker = outcome.result().NextMarker();
isTruncated = outcome.result().IsTruncated();
} while (isTruncated);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
相关文档
- 关于删除单个或多个文件的完整示例代码,请参见 GitHub示例 。
- 关于删除单个文件的API接口说明,请参见 DeleteObject 。
- 关于删除多个文件的API接口说明,请参见 DeleteMultipleObjects 。