Topik ini menjelaskan cara menghapus satu objek, beberapa objek tertentu, objek dengan awalan nama tertentu, atau direktori beserta seluruh objek di dalamnya.
Berhati-hatilah saat melakukan operasi penghapusan. Objek yang telah dihapus tidak dapat dipulihkan.
Catatan penggunaan
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 informasi selengkapnya mengenai wilayah dan titik akhir yang didukung, 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 Buat OssClient.
Untuk menghapus objek, Anda harus memiliki izin
oss:DeleteObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.
Hapus satu objek
Kode berikut menunjukkan cara menghapus objek exampleobject.txt dari bucket examplebucket.
<?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();
// Tetapkan endpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Path lengkap tidak boleh mengandung nama bucket.
$object = "exampledir/exampleobject.txt";
try{
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$ossClient->deleteObject($bucket, $object);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . "OK" . "\n"); Hapus beberapa objek
Anda dapat menghapus hingga 1.000 objek sekaligus secara manual. Anda dapat menghapus beberapa objek tertentu, objek dengan awalan tertentu, atau direktori beserta seluruh objek di dalamnya.
OSS juga mendukung penghapusan objek otomatis dengan mengonfigurasi aturan siklus hidup. Untuk informasi selengkapnya, lihat Aturan siklus hidup berdasarkan waktu modifikasi terakhir.
Hapus beberapa objek dengan nama tertentu
Kode berikut menunjukkan cara menghapus beberapa objek dengan nama tertentu.
<?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\OssClient;
use OSS\Core\OssException;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Tetapkan endpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
// Tentukan path lengkap objek yang ingin dihapus. Path lengkap tidak boleh mengandung nama bucket.
$objects = array();
$objects[] = "exampleobjecta.txt";
$objects[] = "exampledir/sampleobject.txt";
$result = $ossClient->deleteObjects($bucket, $objects);
foreach ($result as $info){
$obj = strval($info);
printf("Delete ".$obj." : Success" . "\n");
}
printf("Delete Objects : OK" . "\n");
} catch (OssException $e) {
printf("Delete Objects : Failed" . "\n");
printf($e->getMessage() . "\n");
return;
} Hapus beberapa objek dengan awalan tertentu atau dalam direktori
Kode berikut menunjukkan cara menghapus beberapa objek dengan awalan tertentu, atau direktori beserta seluruh objek di dalamnya.
Jika nilai OSS_PREFIX pada kode berikut adalah string kosong atau NULL, semua objek dalam bucket akan dihapus. Gunakan fitur ini dengan hati-hati.
<?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\OssClient;
use OSS\Core\OssException;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Tetapkan endpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
$option = array(
OssClient::OSS_MARKER => null,
// Untuk menghapus semua objek yang namanya diawali dengan "src", tetapkan prefix ke "src". Operasi ini menghapus semua objek non-folder dengan awalan tersebut, folder "src", serta semua objek di dalam folder "src".
OssClient::OSS_PREFIX => "src",
// Untuk menghapus hanya folder "src" dan semua objek di dalamnya, tetapkan prefix ke "src/".
// OssClient::OSS_PREFIX => "src/",
);
$bool = true;
while ($bool){
// Daftarkan dan hapus beberapa objek.
$result = $ossClient->listObjects($bucket,$option);
$objects = array();
if(count($result->getObjectList()) > 0){
foreach ($result->getObjectList() as $key => $info){
printf("key name:".$info->getKey().PHP_EOL);
$objects[] = $info->getKey();
}
$delObjects = $ossClient->deleteObjects($bucket, $objects);
foreach ($delObjects as $info){
$obj = strval($info);
printf("Delete ".$obj." : Success" . PHP_EOL);
}
}
if($result->getIsTruncated() === 'true'){
$option[OssClient::OSS_MARKER] = $result->getNextMarker();
}else{
$bool = false;
}
}
printf("Delete Objects : OK" . PHP_EOL);
} catch (OssException $e) {
printf("Delete Objects : Failed" . PHP_EOL);
printf($e->getMessage() . PHP_EOL);
return;
}Jika terjadi pengecualian (exception) dan ditangkap dalam blok try{}catch{}, objek tidak dihapus. Dalam kasus ini, Anda dapat menggunakan $e->getMessage() untuk mendapatkan pesan error dan menganalisis penyebabnya.
Referensi
Untuk kode contoh lengkap mengenai penghapusan satu objek atau beberapa objek, lihat contoh di GitHub.
Untuk informasi selengkapnya mengenai operasi API untuk menghapus satu objek, lihat DeleteObject.
Untuk informasi selengkapnya mengenai operasi API untuk menghapus beberapa objek, lihat DeleteMultipleObjects.