Topik ini menjelaskan cara menghapus satu objek, beberapa objek, atau objek dengan awalan tertentu dari bucket yang diaktifkan versioning.
Perhatian
-
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Regions and endpoints.
-
Topik ini menunjukkan pembuatan instans OSSClient dengan endpoint OSS. Untuk konfigurasi alternatif, seperti penggunaan domain kustom atau autentikasi dengan kredensial dari Security Token Service (STS), lihat Create an OssClient.
-
Untuk menghapus objek, Anda harus memiliki izin
oss:DeleteObject. Untuk informasi lebih lanjut, lihat Grant custom permissions to a RAM user.
Perilaku penghapusan untuk bucket yang diaktifkan versioning
-
Penghapusan sementara (tanpa menentukan ID versi):
Jika Anda melakukan operasi penghapusan tanpa menentukan ID versi, OSS tidak menghapus versi terkini objek tersebut. Sebagai gantinya, OSS menyisipkan penanda hapus untuk objek tersebut. Saat Anda mengambil objek tersebut, OSS mendeteksi bahwa versi terkininya adalah penanda hapus dan mengembalikan
404 Not Found. Tanggapan tersebut juga menyertakan headerx-oss-delete-marker: truedanx-oss-version-iddari penanda hapus baru tersebut. -
Penghapusan permanen (dengan menentukan ID versi):
Jika Anda melakukan operasi penghapusan dan menentukan ID versi, OSS menghapus permanen versi yang ditentukan berdasarkan parameter
versionIdpada objekparams. Untuk menghapus versi dengan ID "null", tambahkan ke objekparamspengaturanparams['versionId'] = "null". OSS memperlakukan string "null" sebagai ID versi dan menghapus versi objek yang ID-nya "null".
Hapus satu objek
Contoh berikut menunjukkan cara menghapus satu objek secara permanen atau sementara.
-
Penghapusan permanen
Kode berikut menunjukkan cara menghapus objek secara permanen dengan menentukan ID versinya:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. $provider = new EnvironmentVariableCredentialsProvider(); // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Ganti dengan titik akhir aktual Anda. $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; // Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: example/test.txt. $object = "<yourObjectName>"; $versionId = "<yourObjectVersionId>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // Hapus objek dengan ID versi yang ditentukan. $ossClient->deleteObject($bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId)); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); -
Penghapusan sementara
Kode berikut menunjukkan cara menghapus objek secara sementara tanpa menentukan ID versi:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. $provider = new EnvironmentVariableCredentialsProvider(); // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Ganti dengan titik akhir aktual Anda. $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $object = "<yourObjectName>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // Hapus objek secara sementara tanpa menentukan ID versinya. Operasi ini menambahkan penanda hapus ke objek tersebut. $ret = $ossClient->deleteObject($bucket, $object); print("delete marker:" .$ret['x-oss-delete-marker'] ."\n"); print("version id:" .$ret['x-oss-version-id']); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");
Untuk informasi lebih lanjut, lihat DeleteObject.
Hapus beberapa objek
Contoh berikut menunjukkan cara menghapus beberapa objek secara permanen atau sementara.
-
Penghapusan permanen
Kode berikut menunjukkan cara menghapus beberapa objek secara permanen dengan menentukan ID versi masing-masing:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; use OSS\Model\DeleteObjectInfo; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. $provider = new EnvironmentVariableCredentialsProvider(); // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Ganti dengan titik akhir aktual Anda. $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // Hapus beberapa objek dengan ID versi yang ditentukan. $objects = array(); $objects[] = new DeleteObjectInfo("<yourObject1Name>", "<object1VersionId>"); $objects[] = new DeleteObjectInfo("<yourObject2Name>", "<object2VersionId>"); $deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects); // Lihat hasil penghapusan. if (!empty($deletedObjectList)) { print("deletedObjectList:\n"); foreach ($deletedObjectList as $deletedObjectInfo) { print($deletedObjectInfo->getKey() . ","); print($deletedObjectInfo->getVersionId() . ","); print($deletedObjectInfo->getDeleteMarker() . ","); print($deletedObjectInfo->getDeleteMarkerVersionId() . "\n"); } } } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); -
Penghapusan sementara
Kode berikut menunjukkan cara menghapus beberapa objek tanpa menentukan ID versi masing-masing:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; use OSS\Model\DeleteObjectInfo; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. $provider = new EnvironmentVariableCredentialsProvider(); // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Ganti dengan titik akhir aktual Anda. $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // Hapus beberapa objek secara sementara tanpa menentukan ID versi masing-masing. Operasi ini menambahkan penanda hapus ke setiap objek. $objects = array(); $objects[] = new DeleteObjectInfo("<yourObject1Name>"); $objects[] = new DeleteObjectInfo("<yourObject2Name>"); $deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects); // Lihat hasil penghapusan. if (!empty($deletedObjectList)) { print("deletedObjectList:\n"); foreach ($deletedObjectList as $deletedObjectInfo) { print($deletedObjectInfo->getKey() . ","); print($deletedObjectInfo->getVersionId() . ","); print($deletedObjectInfo->getDeleteMarker() . ","); print($deletedObjectInfo->getDeleteMarkerVersionId() . "\n"); } } } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");
Untuk informasi lebih lanjut, lihat DeleteMultipleObjects.