本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
您可以根據需要刪除單個文件(Object)、刪除指定的多個文件、刪除指定前綴的文件或者刪除指定目錄及目錄下的所有文件。
請您謹慎使用刪除操作,文件刪除后將無法恢復。
注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的Region與Endpoint的對應關系,請參見OSS地域和訪問域名。
本文以OSS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請參見新建OssClient。
要刪除文件,您必須具有
oss:DeleteObject
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。
刪除單個文件
以下代碼用于刪除examplebucket中的exampleobject.txt文件。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS賬號信息。*/
/* yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/ *yourRegion填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn - hangzhou。 * /
std::string Region = "yourRegion";
/* 填寫Bucket名稱,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填寫Object完整路徑,例如exampleobject.txt。Object完整路徑中不能包含Bucket名稱。*/
/* 當要刪除目錄時,請將ObjectName設置為對應的目錄名稱。如果目錄非空,則需要將目錄下的所有Object刪除后才能刪除該目錄。*/
std::string ObjectName = "exampleobject.txt";
/* 初始化網絡等資源。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
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賬號信息。*/
/* yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/ *yourRegion填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn - hangzhou。 * /
std::string Region = "yourRegion";
/* 填寫Bucket名稱,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 初始化網絡等資源。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
DeleteObjectsRequest request(BucketName);
/* 添加要刪除的多個Object的完整路徑。*/
request.addKey("yourObjectName1");
request.addKey("yourObjectName2");
/* 刪除文件。*/
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賬號信息。*/
/* yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/ *yourRegion填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn - hangzhou。 * /
std::string Region = "yourRegion";
/* 填寫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;
conf.signatureVersion = SignatureVersionType::V4;
/* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
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;
}
相關文檔
關于刪除單個或多個文件的完整示例代碼,請參見GitHub示例。
關于刪除單個文件的API接口說明,請參見DeleteObject。
關于刪除多個文件的API接口說明,請參見DeleteMultipleObjects。