Topik ini menjelaskan cara menghapus satu file (objek), beberapa file, dan file dengan awalan tertentu di bucket yang telah diaktifkan fitur Pengendalian versi.
Catatan penggunaan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.
Untuk menghapus objek, Anda harus memiliki izin
oss:DeleteObject. Untuk informasi selengkapnya, lihat Berikan kebijakan akses kustom kepada RAM user.
Perilaku penghapusan di bucket yang diaktifkan Pengendalian versi
Perilaku penghapusan di bucket yang diaktifkan Pengendalian versi adalah sebagai berikut:
Hapus tanpa menentukan version ID (penghapusan temporary):
Jika Anda menghapus objek tanpa menentukan version ID, OSS tidak akan menghapus objek tersebut secara permanen. Sebagai gantinya, OSS menambahkan penanda hapus, yang menjadi versi terkini dari objek tersebut. Jika Anda mencoba mengambil objek tersebut, OSS akan menemukan penanda hapus dan mengembalikan error
404 Not Found. Tanggapan tersebut menyertakanheader:x-oss-delete-marker = truedan version ID dari penanda hapus baru dalamx-oss-version-id.Nilai true untuk
x-oss-delete-markermenunjukkan bahwa versi yang sesuai denganx-oss-version-idyang dikembalikan merupakan penanda hapus.Hapus dengan menentukan version ID (penghapusan permanen):
Jika Anda menentukan `versionId` dalam operasi penghapusan, OSS akan menghapus secara permanen versi objek dengan
versionIdyang ditentukan dalam parameterparams. Untuk menghapus versi objek yang `versionId`-nya berupa string "null", tambahkanparams['versionId'] = "null"ke parameterparams. Dalam kasus ini, OSS memperlakukan string "null" sebagai `versionId` dan menghapus versi objek yang sesuai.
Hapus satu file berdasarkan nama
Hapus file secara permanen
Kode berikut menunjukkan cara menghapus secara permanen versi tertentu dari objek dengan menentukan versionId-nya. Versi objek yang dihapus secara permanen tidak dapat dipulihkan.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Hapus objek dengan versionId yang ditentukan atau objek yang terkait dengan penanda hapus yang memiliki versionId yang ditentukan. */
auto outcome = client.DeleteObject(DeleteObjectRequest(BucketName, ObjectName, "yourObjectVersionIdOrDeleteMarkerVersionId"));
/* Jika versionId objek ditentukan, delete_marker yang dikembalikan adalah None dan versionId yang dikembalikan adalah versionId objek yang ditentukan. */
/* Jika versionId penanda hapus ditentukan, delete_marker yang dikembalikan adalah True dan versionId yang dikembalikan adalah versionId penanda hapus yang ditentukan. */
if (!outcome.isSuccess()) {
/* Tangani exception. */
std::cout << "DeleteObject gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Hapus file secara temporary
Kode berikut menunjukkan cara menghapus objek secara temporary tanpa menentukan versionId. Versi objek yang dihapus secara temporary dapat dipulihkan.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
DeleteObjectRequest request(BucketName, ObjectName);
/* Hapus objek secara temporary tanpa menentukan versionId. Operasi ini menambahkan penanda hapus ke objek. */
auto outcome = client.DeleteObject(request);
/* Lihat versionId dari penanda hapus yang dikembalikan. */
if (outcome.isSuccess()) {
std::cout << "versionid:" << outcome.result().VersionId() << ",DeleteMarker:" << outcome.result().DeleteMarker() << std::endl;
}
else {
/* Tangani exception. */
std::cout << "DeleteObject gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Hapus beberapa file berdasarkan nama
Hapus file secara permanen
Kode berikut menunjukkan cara menghapus secara permanen beberapa versi objek dengan menentukan versionId-nya, atau menghapus penanda hapus dengan menentukan versionId-nya. Versi objek yang dihapus secara permanen tidak dapat dipulihkan.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
DeleteObjectVersionsRequest request(BucketName);
/* Tambahkan versionId objek atau penanda hapus yang akan dihapus. */
ObjectIdentifier obj1("yourObject1Name");
obj1.setVersionId("yourVersionId");
ObjectIdentifier obj2("yourObject2Name");
obj2.setVersionId("obj2_del_marker_versionid");
request.addObject(obj1);
request.addObject(obj2);
/* Hapus secara batch objek dengan versionId yang ditentukan atau objek yang terkait dengan versionId penanda hapus yang ditentukan. */
auto outcome = client.DeleteObjectVersions(request);
if (!outcome.isSuccess()) {
/* Tangani exception. */
std::cout << "DeleteObjectVersions gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Hapus file secara temporary
Kode berikut menunjukkan cara menghapus beberapa objek secara temporary tanpa menentukan versionId-nya. Versi objek yang dihapus secara temporary dapat dipulihkan.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
DeleteObjectVersionsRequest request(BucketName);
/* Tentukan nama objek yang akan dihapus. */
ObjectIdentifier obj1("ObjectName1");
ObjectIdentifier obj2("ObjectName2");
ObjectIdentifier obj3("ObjectName3");
request.addObject(obj1);
request.addObject(obj2);
request.addObject(obj3);
/* Hapus objek-objek tersebut. */
auto outcome = client.DeleteObjectVersions(request);
if (outcome.isSuccess()) {
for (auto const &obj : outcome.result().DeletedObjects()) {
std::cout << "versionid:" << obj.VersionId() << ",DeleteMarker:" << obj.DeleteMarker() << std::endl;
}
}
else {
/* Tangani exception. */
std::cout << "DeleteObjectVersions gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Hapus file dengan awalan tertentu
Kode berikut menunjukkan cara menghapus file dengan awalan tertentu.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
ListObjectVersionsRequest request(BucketName);
bool IsTruncated = false;
do {
request.setPrefix("yourkeyPrefix");
auto outcome = client.ListObjectVersions(request);
if (outcome.isSuccess()) {
/* Lihat informasi versi dari objek dan penanda hapus yang terdaftar. */
for (auto const &marker : outcome.result().DeleteMarkerSummarys()) {
client.DeleteObject(DeleteObjectRequest(BucketName, marker.Key(), marker.VersionId()));
}
/* Daftar informasi versi semua objek dengan awalan yang ditentukan dan hapus file-file tersebut. */
for (auto const &obj : outcome.result().ObjectVersionSummarys()) {
client.DeleteObject(DeleteObjectRequest(BucketName, obj.Key(), obj.VersionId()));
}
}
else {
std::cout << "ListObjectVersions gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
}
request.setKeyMarker(outcome.result().NextKeyMarker());
request.setVersionIdMarker(outcome.result().NextVersionIdMarker());
IsTruncated = outcome.result().IsTruncated();
} while (IsTruncated);
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Referensi
Untuk informasi selengkapnya mengenai operasi API untuk menghapus satu file, lihat DeleteObject.
Untuk informasi selengkapnya mengenai operasi API untuk menghapus beberapa file, lihat DeleteMultipleObjects.