Topik ini menjelaskan cara menghapus satu objek, beberapa objek, atau objek dengan awalan tertentu dari bucket yang diaktifkan versioning.
Perhatian
Pada topik ini, digunakan 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.
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 Create an OssClient.
Untuk menghapus objek, Anda harus memiliki izin
oss:DeleteObject. Untuk informasi selengkapnya, lihat Grant custom permissions to a RAM user.
Perilaku penghapusan untuk bucket yang diaktifkan versioning
Penghapusan sementara (tanpa menentukan version ID):
Jika Anda melakukan operasi penghapusan tanpa menentukan version ID, OSS tidak menghapus versi terkini dari objek tersebut. Sebagai gantinya, OSS menyisipkan delete marker untuk objek tersebut. Saat Anda mengambil objek tersebut, OSS mendeteksi bahwa versi terkini adalah delete marker dan mengembalikan
404 Not Found. Respons tersebut juga mencakup headerx-oss-delete-marker: truedanx-oss-version-iddari delete marker baru tersebut.Penghapusan permanen (dengan menentukan version ID):
Jika Anda melakukan operasi penghapusan dan menentukan version ID, OSS akan 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 version ID dan menghapus versi objek yang ID-nya "null".
Hapus objek tunggal
Contoh berikut menunjukkan cara menghapus permanen atau sementara satu objek.
Penghapusan permanen
Kode berikut menunjukkan cara menghapus permanen objek dengan menentukan version ID-nya:
<?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. Gantilah dengan titik akhir Anda yang sebenarnya. $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 version ID 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 sementara objek tanpa menentukan version ID:
<?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. Gantilah dengan titik akhir Anda yang sebenarnya. $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 sementara objek tanpa menentukan version ID-nya. Operasi ini menambahkan delete marker 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 selengkapnya, lihat DeleteObject.
Hapus multiple objek
Contoh berikut menunjukkan cara menghapus permanen atau sementara beberapa objek.
Penghapusan permanen
Kode berikut menunjukkan cara menghapus permanen beberapa objek dengan menentukan version ID-nya:
<?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. Gantilah dengan titik akhir Anda yang sebenarnya. $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 multiple objek dengan version ID 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");Soft delete
Kode berikut menunjukkan cara menghapus beberapa objek tanpa menentukan version ID-nya:
<?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. Gantilah dengan titik akhir Anda yang sebenarnya. $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 sementara multiple objek tanpa menentukan version ID-nya. Operasi ini menambahkan delete marker 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 selengkapnya, lihat DeleteMultipleObjects.