Topik ini menjelaskan cara menghapus satu objek, beberapa objek, dan objek yang namanya mengandung awalan tertentu dari bucket yang telah diaktifkan Pengendalian versi.
Catatan penggunaan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya dalam 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 instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.
Untuk menghapus objek, Anda harus memiliki izin
oss:DeleteObject. Untuk informasi selengkapnya, lihat Berikan kebijakan akses kustom kepada RAM user.
Perilaku penghapusan pada bucket yang diaktifkan Pengendalian versi
Perilaku penghapusan pada bucket yang diaktifkan Pengendalian versi adalah sebagai berikut:
Hapus tanpa menentukan ID versi (penghapusan temporary):
Jika Anda menghapus objek tanpa menentukan ID versi, 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 kesalahan
404 Not Found. Tanggapan tersebut menyertakanheader:x-oss-delete-marker = truedan ID versi 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 ID versi (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 objek
Contoh berikut menunjukkan cara menghapus satu objek secara permanen atau temporary dari bucket yang diaktifkan Pengendalian versi.
Penghapusan permanen
Kode contoh berikut menunjukkan cara menghapus versi objek secara permanen dari bucket yang diaktifkan Pengendalian versi dengan menentukan ID versi objek dalam permintaan:
using Aliyun.OSS; using Aliyun.OSS.Common; // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. var objectName = "exampledir/exampleobject.txt"; // Tentukan ID versi objek atau penanda hapus. var versionid = "yourObjectVersionidOrDelMarkerVersionid"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Tentukan ID versi objek atau penanda hapus yang ingin Anda hapus. var request = new DeleteObjectRequest(bucketName, objectName) { VersionId = versionid }; client.DeleteObject(request); Console.WriteLine("Hapus objek berhasil"); } catch (Exception ex) { Console.WriteLine("Hapus objek gagal. {0}", ex.Message); }Penghapusan temporary
Kode contoh berikut menunjukkan cara menghapus objek secara temporary dari bucket yang diaktifkan Pengendalian versi dengan mengirim permintaan tanpa menentukan ID versi:
using Aliyun.OSS; using Aliyun.OSS.Common; // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. var objectName = "exampledir/exampleobject.txt"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Hapus objek secara temporary tanpa menentukan ID versinya. Penanda hapus akan ditambahkan ke objek tersebut. var result = client.DeleteObject(bucketName, objectName); Console.WriteLine("Hapus objek berhasil, versionid: {0}, DeleteMarker: {1}", result.VersionId, result.DeleteMarker); } catch (Exception ex) { Console.WriteLine("Hapus objek gagal. {0}", ex.Message); }
Hapus beberapa objek
Contoh berikut menjelaskan cara menghapus beberapa objek secara permanen atau temporary dari bucket yang diaktifkan Pengendalian versi.
Penghapusan permanen
Kode contoh berikut menunjukkan cara menghapus beberapa objek atau penanda hapus dengan ID versi tertentu dari bucket yang diaktifkan Pengendalian versi:
using Aliyun.OSS; using Aliyun.OSS.Common; // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Hapus objek dengan ID versi tertentu atau objek yang versi terkininya merupakan penanda hapus dengan ID versi tertentu. var obj1 = new ObjectIdentifier { Key = "yourObject1Name", VersionId = "yourObject1NameVersionid" }; var obj2 = new ObjectIdentifier { Key = "yourObject2Name", VersionId = "yourObject2DelMarkerVersionid" }; IList<ObjectIdentifier> objects = new List<ObjectIdentifier>(); objects.Add(obj1); objects.Add(obj2); var request = new DeleteObjectVersionsRequest(bucketName, objects); // Kirim permintaan deleteVersions. client.DeleteObjectVersions(request); Console.WriteLine("DeleteObjectVersions berhasil "); } catch (OssException ex) { Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message); }Penghapusan temporary
Kode contoh berikut menunjukkan cara menghapus beberapa objek secara temporary dari bucket yang diaktifkan Pengendalian versi tanpa menentukan ID versi. Anda dapat memulihkan versi terkini objek setelah objek tersebut dihapus secara temporary.
using Aliyun.OSS; using Aliyun.OSS.Common; // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { var keys = new List<string>(); var listResult = client.ListObjects(bucketName); foreach (var summary in listResult.ObjectSummaries) { keys.Add(summary.Key); } // Tentukan nilai quietMode. true berarti mode quiet. Dalam mode ini, objek yang dihapus tidak dikembalikan. false berarti mode verbose. Dalam mode ini, objek yang dihapus dikembalikan. Nilai default: false. var quietMode = false; // Tentukan mode pengembalian dengan mengatur nilai quietMode dalam permintaan DeleteObjectsRequest. var request = new DeleteObjectsRequest(bucketName, keys, quietMode); // Hapus objek tanpa menentukan ID versinya. Penanda hapus akan ditambahkan ke objek tersebut. var result = client.DeleteObjects(request); if ((!quietMode) && (result.Keys != null)) { foreach (var obj in result.Keys) { Console.WriteLine("Berhasil dihapus : {0} ", obj.Key); } } Console.WriteLine("Hapus objek berhasil"); } catch (Exception ex) { Console.WriteLine("Hapus objek gagal. {0}", ex.Message); }
Hapus objek yang namanya mengandung awalan tertentu
Kode contoh berikut menunjukkan cara menghapus objek yang namanya mengandung awalan tertentu:
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket.
var bucketName = "examplebucket";
var prefix = "yourkeyPrefix";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
ObjectVersionList result = null;
var request = new ListObjectVersionsRequest(bucketName)
{
// Tentukan awalan yang terdapat dalam nama objek yang ingin Anda daftar.
Prefix = prefix;
};
// Daftar semua versi objek yang namanya mengandung awalan tertentu dan hapus versi tersebut.
do {
result = client.ListObjectVersions(request);
Console.WriteLine("ListObjectVersions berhasil");
foreach (var deleteversion in result.DeleteMarkerSummaries)
{
var request = new DeleteObjectRequest(bucketName, deleteversion.Key)
{
VersionId = deleteversion.VersionId
};
client.DeleteObject(request);
}
foreach (var objectversion in result.ObjectVersionSummaries)
{
var request = new DeleteObjectRequest(bucketName, objectversion.Key)
{
VersionId = objectversion.VersionId
};
client.DeleteObject(request);
}
request.KeyMarker = result.NextKeyMarker;
request.NextVersionIdMarker = result.NextVersionIdMarker ;
} while (result.IsTruncated)
}
catch (OssException ex)
{
Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
}Referensi
Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk menghapus objek, lihat DeleteObject.
Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk menghapus beberapa objek, lihat DeleteMultipleObjects.