您可以根据需要删除单个文件(Object)、删除指定的多个文件或者删除指定前缀的文件。

警告 请您谨慎使用删除操作,文件删除后将无法恢复。

删除单个文件

以下代码用于删除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;
        ShutdownSdk();
        return -1;
    }

    /* 释放网络等资源。*/
    ShutdownSdk();
    return 0;
}

批量删除文件

批量删除文件时,每次最多删除1000个文件。您可以删除指定的多个文件或者删除指定前缀的文件。

OSS还支持通过设置生命周期规则来自动删除文件。更多信息,请参见开发指南中的基于最后一次修改时间的生命周期规则介绍

返回结果包括如下两种模式,默认返回模式为详细模式,请根据实际选择返回模式。

  • 详细模式(verbose):返回所有删除的文件列表。
  • 简单模式(quiet):只返回删除失败的文件列表。
  • 删除指定的多个文件
    以下代码用于删除examplebucket中指定的多个文件。
    #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;
            ShutdownSdk();
            return -1;
        }
    
        /* 释放网络等资源。*/
        ShutdownSdk();
        return 0;
    }
  • 删除指定前缀的文件
    以下代码用于删除examplebucket中以file为前缀的文件。
    #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";
        /* 指定前缀。*/
        std::string keyPrefix = "file";
    
        /* 初始化网络等资源。*/
        InitializeSdk();
    
        ClientConfiguration conf;
        OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
    
        std::string nextMarker = "";
        bool isTruncated = false;
        do {
                /* 列举文件。*/
                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;
    }