This topic describes how to delete a single or multiple objects and objects whose names contain a specified prefix.
Warning Deleted objects cannot be recovered. Exercise caution when you delete objects.
Delete a single object
The following code provides an example on how to delete an object:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize the OSS account information. */
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
std::string Endpoint = "yourEndpoint";
std::string BucketName = "yourBucketName";
std::string ObjectName = "yourObjectName";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* ObjectName indicates the complete path of the object you want to delete from OSS. The path must include the file extension of the object. For example, set ObjectName to abc/efg/123.jpg. */
/* To delete a folder, set ObjectName to the folder name. If the folder is not empty, you need to delete all objects in the folder before you can delete the folder. */
DeleteObjectRequest request(BucketName, ObjectName);
/* Delete the object. */
auto outcome = client.DeleteObject(request);
if (! outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "DeleteObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}
Delete multiple objects
A maximum of 1,000 objects can be deleted each time. The deletion results can be returned in the following two modes:
- verbose: returns a list of deleted objects. The default mode is verbose.
- quiet: returns a list of objects that you failed to delete.
The following code provides an example on how to delete multiple objects at a time:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize the OSS account information. */
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
std::string Endpoint = "yourEndpoint";
std::string BucketName = "yourBucketName";
std::string ObjectName = "yourObjectName";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
DeleteObjectsRequest request(BucketName);
/* Add the names of the objects that you want to delete. */
request.addKey(ObjectName);
/* Delete the objects. */
auto outcome = client.DeleteObjects(request);
if (! outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "DeleteObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}
Delete objects whose names contain a specified prefix
The following code provides an example on how to delete objects whose names contain a specified prefix:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize the OSS account information. */
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
std::string Endpoint = "yourEndpoint";
std::string BucketName = "yourBucketName";
std::string keyPrefix = "yourkeyPrefix";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
std::string nextMarker = "";
do {
/* List the objects. */
ListObjectsRequest request(BucketName);
/* Specify the prefix. */
request.setPrefix(keyPrefix);
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (! outcome.isSuccess()) {
/* Handle exceptions. */
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());
/* Delete the objects. */
auto delResult = client.DeleteObject(request);
}
nextMarker = outcome.result().NextMarker();
} while (outcome.result().IsTruncated());
/* Release network resources. */
ShutdownSdk();
return 0;
}