全部产品
Search
文档中心

Object Storage Service:Validasi data (Python SDK V1)

更新时间:Nov 29, 2025

OSS menyediakan Validasi MD5 dan Pemeriksaan redundansi siklik 64-bit (CRC-64) untuk memastikan integritas data saat Anda mengunggah, mengunduh, dan menyalin objek.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials using OSS SDK for 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 Initialization.

Validasi MD5

Saat mengunggah file, Anda dapat mengatur header Content-MD5 untuk memastikan integritas data. OSS menghitung hash MD5 dari konten yang diterima. Jika hash MD5 yang dihitung oleh OSS tidak sesuai dengan hash MD5 yang Anda berikan, OSS akan mengembalikan error InvalidDigest. Dalam kasus tersebut, Anda harus mengunggah ulang file tersebut.

Lakukan validasi MD5 saat mengunggah file:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
region = "cn-hangzhou"

# Ganti examplebucket dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan path lengkap objek. Path lengkap tidak boleh mencakup nama bucket. Contohnya, exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
# Tentukan path lokal file yang akan diunggah. Nilai variabel ini dikirim ke OSS sebagai konten yang diunggah. File dapat berupa jenis apa pun, seperti teks, citra, video, atau audio.
with open('/Users/test/Desktop/demo.txt', 'rb') as file:
    content = file.read()

# Hitung hash MD5 dari konten yang akan diunggah.
content_md5 = oss2.utils.content_md5(content)
print('content_md5', content_md5)

# Sertakan header 'Content-MD5' dalam permintaan unggah. Server memverifikasi hash MD5 dari konten yang diunggah untuk memastikan integritas dan kebenarannya.
headers = dict()
headers['Content-MD5'] = content_md5
bucket.put_object(object_name, content, headers=headers)
Catatan

Validasi MD5 didukung untuk put_object, append_object, post_object, dan upload_part.

Validasi CRC-64

Saat menggunakan Pemeriksaan redundansi siklik (CRC) untuk validasi data, perhatikan hal-hal berikut:

Catatan
  • Validasi CRC-64 didukung untuk put_object, get_object, append_object, dan upload_part. Validasi CRC diaktifkan secara default untuk pengunggahan file. Jika nilai CRC yang dihitung oleh klien tidak sesuai dengan nilai CRC yang dikembalikan oleh server, eksepsi InconsistentError akan dilemparkan.

  • Pengunduhan rentang (range downloads) tidak mendukung validasi CRC-64.

  • Validasi CRC-64 mengonsumsi sumber daya CPU dan dapat memengaruhi kecepatan unggah dan unduh.

  • Validasi CRC-64 untuk pengunduhan

    Kode berikut menunjukkan cara melakukan validasi integritas data CRC-64 saat mengunduh file:

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    # Tentukan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
    region = "cn-hangzhou"
    
    # Ganti examplebucket dengan nama bucket Anda.
    bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
    
    # Tentukan path lengkap objek. Path lengkap tidak boleh mencakup nama bucket.
    object_name = 'yourObjectName'
    
    # Periksa apakah validasi CRC diaktifkan secara default.
    print('bucket.enable-crc:',  bucket.enable_crc)
    
    # Nilai kembali bucket.get_object adalah objek bertipe file dan juga dapat diiterasi.
    object_stream = bucket.get_object(object_name)
    print(object_stream.read())
    
    # Karena operasi get_object mengembalikan aliran (stream), Anda harus memanggil read() sebelum dapat menghitung checksum CRC dari data objek yang dikembalikan. Oleh karena itu, lakukan validasi CRC setelah memanggil operasi ini.
    if object_stream.client_crc != object_stream.server_crc:
      print("Checksum CRC antara client dan server tidak konsisten!")
  • Validasi CRC-64 untuk unggahan append

    Untuk unggahan append, jika Anda menentukan parameter init_crc, validasi CRC-64 diaktifkan secara default.

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    # Tentukan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
    region = "cn-hangzhou"
    
    # Ganti examplebucket dengan nama bucket Anda.
    bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
    
    object_name = "yourAppendObjectName"
    first_content = "yourFirstContent"
    second_content = "yourSecondContent"
    
    # Unggahan append pertama.
    # Jika init_crc ditentukan, SDK secara default melakukan validasi CRC pada hasil yang dikembalikan.
    result = bucket.append_object(object_name, 0, first_content, init_crc=0)
    
    # Unggahan append kedua.
    # Setel init_crc ke nilai CRC dari data yang diunggah.
    result = bucket.append_object(object_name, result.next_position, second_content, init_crc=result.crc)

Referensi

Untuk kode contoh lengkap mengenai validasi data, lihat contoh di GitHub.