Objek dalam Object Storage Service (OSS) memiliki nilai ETag yang digunakan untuk mengidentifikasi perubahan pada data di server. Namun, nilai ETag ini tidak selalu sama dengan hash MD5 dari objek tersebut. Kami menyarankan agar Anda tidak menggunakan nilai ETag untuk memverifikasi konsistensi data.
Untuk memastikan bahwa objek yang diunggah ke OSS konsisten dengan file lokal, Anda dapat menyertakan nilai header Content-MD5 dalam permintaan unggah. Saat OSS menerima objek, sistem akan membandingkan hash MD5 dengan nilai header Content-MD5. Objek hanya dapat diunggah jika hash MD5 sesuai dengan nilai header Content-MD5. Dengan cara ini, konsistensi data dipastikan.
Contoh berikut menggunakan string "123456789" untuk menunjukkan cara menghitung nilai Content-MD5 dari konten permintaan.
Perhitungan yang Benar
Hitung hash MD5 dari string, yang merupakan larik biner 128-bit.
Enkode larik biner (bukan string 32-bit) dalam Base64.
Kode Python berikut memberikan contoh cara menghitung nilai Content-MD5:
>>> import base64,hashlib >>> hash = hashlib.md5() >>> hash.update("0123456789") // Jika Anda menggunakan Python 3, ubah baris ini menjadi hash.update(b"0123456789"). >>> base64.b64encode(hash.digest()) 'eB5e********************'Gunakan hash.digest() untuk menghitung larik biner 128-bit.
>>> hash.digest() 'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'Perhitungan yang Salah
CatatanKesalahan umum adalah meng-enkode string 32-bit yang dihitung dalam Base64 untuk mendapatkan nilai Content-MD5.
# Panggil hash.hexdigest() untuk mendapatkan string teks 32-bit. >>> hash.hexdigest() '781e5e245d69b566979b86e28d23f2c7' # Contoh kode berikut memberikan contoh hasil pengkodean hash MD5 yang salah dalam Base64: >>> base64.b64encode(hash.hexdigest()) 'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='