Object Storage Service (OSS) SDK untuk Android menyediakan metode untuk memverifikasi integritas data dan memastikan keamanan data saat Anda mengunggah, mengunduh, atau menyalin objek.
Catatan penggunaan
Sebelum menjalankan kode contoh dalam topik ini, Anda harus membuat instans OSSClient dengan metode seperti menggunakan nama domain kustom atau Security Token Service (STS). Untuk informasi selengkapnya, lihat Inisialisasi (Android SDK).
Informasi latar belakang
Karena kompleksitas lingkungan jaringan seluler, kesalahan dapat terjadi saat data ditransfer melalui jaringan seluler antara klien dan server. OSS SDK untuk Android menyediakan metode verifikasi CRC-64 dan MD5 untuk memastikan integritas data.
Cyclic Redundancy Check
Jika verifikasi CRC-64 diaktifkan untuk pembacaan aliran data, OSS secara otomatis memverifikasi integritas data setelah pembacaan aliran selesai.
Kode contoh berikut menunjukkan cara mengaktifkan CRC-64:
Pada contoh ini, operasi sinkron getObject digunakan. Operasi sinkron harus dijalankan di thread anak.
// Tentukan nama bucket, misalnya examplebucket, dan path lengkap objek, misalnya exampledir/exampleobject.txt.
// Jangan sertakan nama bucket dalam path lengkap objek.
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
GetObjectRequest request = new GetObjectRequest(bucketName, objectKey);
// Aktifkan validasi CRC-64.
request.setCRC64(OSSRequest.CRC64Config.YES);
try{
GetObjectResult result = oss.getObject(request);
InputStream in = result.getObjectContent();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int len;
while ((len = in.read(buffer)) > -1) {
output.write(buffer, 0, len);
}
output.flush();
in.close();
} catch (ServiceException e) {
Log.e("ErrorCode", e.getErrorCode());
Log.e("RequestId", e.getRequestId());
Log.e("HostId", e.getHostId());
Log.e("RawMessage", e.getRawMessage());
} catch (ClientException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}Verifikasi MD5
Untuk memastikan bahwa objek yang diunggah melalui unggah multi-bagian identik dengan file lokal, Anda dapat menentukan nilai Content-MD5 dalam permintaan unggah tiap bagian. OSS akan memverifikasi integritas data dengan membandingkan hash MD5 dari objek yang diterima dengan nilai Content-MD5 yang dikirim. Pengunggahan hanya berhasil jika kedua nilai tersebut cocok, sehingga memastikan konsistensi objek yang diunggah.
Kode contoh berikut menunjukkan cara mengaktifkan verifikasi MD5:
// Tentukan nama bucket, misalnya examplebucket, path lengkap objek, misalnya exampledir/exampleobject.txt, dan path lengkap file lokal, misalnya /storage/emulated/0/oss/examplefile.txt.
// Jangan sertakan nama bucket dalam path lengkap objek.
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
String filePath = "/storage/emulated/0/oss/examplefile.txt";
// Buat permintaan unggah.
ObjectMetadata metadata = new ObjectMetadata();
try {
// Hitung hash MD5 yang dikodekan Base64.
String fileMD5 = BinaryUtil.calculateBase64Md5(filePath);
Log.i("oss", "file md5: " + fileMD5);
metadata.setContentMD5(fileMD5);
} catch (IOException e) {
Log.e("oss", "Error menghitung md5 file: " + e.getMessage());
}
PutObjectRequest put = new PutObjectRequest(bucketName, objectKey, filePath);
put.setMetadata(metadata);
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Tangani exception permintaan.
if (clientExcepion != null) {
// Tangani exception sisi client, seperti error jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Tangani exception sisi server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Referensi
Untuk informasi selengkapnya tentang cara menginisialisasi instans OSSClient, lihat Inisialisasi.