Topik ini menjelaskan cara menghapus satu atau beberapa file (objek), atau file dengan 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, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya mengenai cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses menggunakan OSS SDK untuk Python 1.0.
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 di bucket yang diaktifkan Pengendalian versi
Perilaku penghapusan adalah sebagai berikut:
Tanpa versionId yang ditentukan (soft delete):
Jika Anda melakukan operasi penghapusan tanpa menentukan versionId, OSS akan menyisipkan penanda hapus untuk versi terkini objek tersebut, bukan menghapus objeknya. Saat Anda kemudian melakukan operasi GetObject, OSS akan mendeteksi penanda hapus tersebut dan mengembalikan error
404 Not Found. Tanggapan tersebut juga mengembalikan headerx-oss-delete-marker = truedan nomor versi penanda hapus baru dalam headerx-oss-version-id.Nilai true pada
x-oss-delete-markermenunjukkan bahwa versi yang sesuai denganx-oss-version-idyang dikembalikan merupakan penanda hapus.Dengan versionId yang ditentukan (permanent delete):
Jika Anda melakukan operasi penghapusan dan menentukan versionId, OSS akan menghapus permanen versi objek tersebut berdasarkan parameter
versionIdpada objekparams. Untuk menghapus versi dengan ID "null", gunakan parameterparamsdan aturparams['versionId'] = "null". OSS memperlakukan string "null" sebagai versionId "null" dan menghapus objek dengan versionId tersebut.
Hapus satu file
Contoh berikut menunjukkan cara menghapus permanen atau soft delete satu objek.
Hapus permanen
Kode berikut menunjukkan cara menghapus permanen objek dengan menentukan versionId-nya:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4. region = "cn-hangzhou" # Ganti yourBucketName dengan nama bucket Anda. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) # Ganti yourObjectName dengan path lengkap objek. Jangan sertakan nama bucket. Contoh: example/test.txt. object_name = 'yourObjectName' # Tentukan versionId objek. Ini juga bisa berupa versionId penanda hapus. params = dict() params['versionId'] = 'yourObjectVersionIdOrDeleteMarkerVersionId' # Hapus objek atau objek yang terkait dengan penanda hapus yang memiliki versionId yang ditentukan. result = bucket.delete_object(object_name, params=params) print("delete object name: ", object_name) # 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 result.delete_marker: print("delete del-marker versionid: ",result.versionid) else: print("delete object versionid:", result.versionid)Soft delete
Kode berikut menunjukkan cara melakukan soft delete objek tanpa menentukan versionId:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4. region = "cn-hangzhou" # Ganti yourBucketName dengan nama bucket Anda. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) # Ganti yourObjectName dengan path lengkap objek. Jangan sertakan nama bucket. Contoh: example/test.txt. object_name = 'yourObjectName' # Lakukan soft delete objek tanpa menentukan versionId. Operasi ini menambahkan penanda hapus ke objek. result = bucket.delete_object(object_name) # Lihat penanda hapus. print("delete marker: ", result.delete_marker) # Lihat versionId penanda hapus yang dikembalikan. print("delete marker versionid: ", result.versionid)
Hapus beberapa file
Contoh berikut menunjukkan cara menghapus permanen atau soft delete beberapa objek.
Hapus permanen
Kode berikut menunjukkan cara menghapus permanen beberapa objek dan penanda hapus dengan menentukan versionId-nya:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.models import BatchDeleteObjectVersion from oss2.models import BatchDeleteObjectVersionList # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4. region = "cn-hangzhou" # Ganti yourBucketName dengan nama bucket Anda. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) version_list = BatchDeleteObjectVersionList() # Anda dapat meneruskan versionId objek atau penanda hapus. obj1_versionid = 'yourObject1VersionId' obj1_del_marker_versionid = 'yourObject1DelMarkerVersionId' obj2_versionid = 'yourObject2VersionId' obj2_del_marker_versionid = 'yourObject2DelMarkerVersionId' version_list.append(BatchDeleteObjectVersion(key='yourObject1Name', versionid=obj1_versionid)) version_list.append(BatchDeleteObjectVersion(key='yourObject1Name', versionid=obj1_del_marker_versionid)) version_list.append(BatchDeleteObjectVersion(key='yourObject2Name', versionid=obj2_versionid)) version_list.append(BatchDeleteObjectVersion(key='yourObject2Name', versionid=obj2_del_marker_versionid)) # Hapus batch objek atau penanda hapus dengan versionId yang ditentukan. result = bucket.delete_object_versions(version_list) # Lihat versionId objek atau penanda hapus yang dihapus. for del_version in result.delete_versions: print('del object name:', del_version.key) # Periksa apakah penanda hapus telah dihapus. print('Is del marker:', del_version.delete_marker) # Jika penanda hapus dihapus, cetak versionId penanda hapus yang dihapus. Jika tidak, cetak versionId objek yang dihapus. if del_version.delete_marker: print('del object del_marker.versionid', del_version.delete_marker_versionid) else: print('del object versionid:', del_version.versionid)Soft delete
Kode berikut menunjukkan cara melakukan soft delete beberapa objek tanpa menentukan versionId-nya:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.models import BatchDeleteObjectVersion from oss2.models import BatchDeleteObjectVersionList # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan V4. region = "cn-hangzhou" # Ganti yourBucketName dengan nama bucket Anda. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) key_list = ['yourObject1Name', 'yourObject2Name'] # Setelah Anda melakukan operasi penghapusan tanpa menentukan versionId, penanda hapus akan ditambahkan ke objek. result = bucket.batch_delete_objects(key_list) for del_version in result.delete_versions: print('key name:', del_version.key) # Cetak penanda hapus yang dikembalikan. print('Is del marker:', del_version.delete_marker) print('key del_marker.versionid', del_version.delete_marker_versionid)
Hapus file dengan awalan tertentu
Kode berikut menunjukkan cara menghapus file yang memiliki awalan tertentu:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
prefix = "yourKeyPrefix"
# Daftar versionId semua file dengan awalan yang ditentukan dan hapus file-file tersebut.
next_key_marker = None
next_versionid_marker = None
while True:
result = bucket.list_object_versions(prefix=prefix, key_marker=next_key_marker, versionid_marker=next_versionid_marker)
for version_info in result.versions:
bucket.delete_object(version_info.key, params={'versionId': version_info.versionid})
for del_marker_info in result.delete_marker:
bucket.delete_object(del_marker_info.key, params={'versionId': del_marker_info.versionid})
is_truncated = result.is_truncated
if is_truncated:
next_key_marker = result.next_key_marker
next_versionid_marker = result.next_versionid_marker
else:
breakReferensi
Untuk informasi selengkapnya mengenai operasi API untuk menghapus satu file, lihat DeleteObject.
Untuk informasi selengkapnya mengenai operasi API untuk menghapus beberapa file, lihat DeleteMultipleObjects.