Anda dapat menentukan satu atau beberapa kondisi saat mengunduh objek. Jika kondisi yang ditentukan terpenuhi, objek akan diunduh; jika tidak, objek tidak diunduh dan kesalahan dikembalikan.
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).
Kondisi
OSS mendukung kondisi berikut:
If-Modified-Since dan If-Unmodified-Since dapat digunakan secara bersamaan. If-Match dan If-None-Match juga dapat digunakan secara bersamaan.
Untuk mengambil ETag, gunakan metode ossClient.getObjectMeta.
Parameter | Deskripsi |
If-Modified-Since | Jika waktu yang ditentukan lebih awal daripada waktu modifikasi aktual, file akan ditransfer. Jika tidak, kesalahan 304 Not Modified dikembalikan. |
If-Unmodified-Since | Jika waktu yang ditentukan sama dengan atau lebih akhir daripada waktu modifikasi aktual, file akan ditransfer. Jika tidak, kesalahan 412 Precondition Failed dikembalikan. |
If-Match | Jika ETag yang ditentukan sesuai dengan ETag objek OSS, file akan ditransfer. Jika tidak, kesalahan 412 Precondition Failed dikembalikan. |
If-None-Match | Jika ETag yang ditentukan tidak sesuai dengan ETag objek OSS, file akan ditransfer. Jika tidak, kesalahan 304 Not Modified dikembalikan. |
Contoh
Kode contoh berikut menunjukkan cara melakukan unduhan bersyarat:
// Tetapkan nama bucket, misalnya examplebucket, dan path lengkap objek, misalnya exampledir/exampleobject.txt.
// Path lengkap objek tidak boleh mengandung nama bucket.
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
// Buat permintaan untuk mengunduh objek.
Map<String, String> headers = new HashMap<>();
// Jika waktu yang ditentukan lebih awal daripada waktu modifikasi terakhir objek, objek akan diunduh. Jika tidak, kesalahan 304 Not modified dikembalikan.
headers.put(OSSHeaders.GET_OBJECT_IF_MODIFIED_SINCE, "Fri, 13 Nov 2015 14:47:53 GMT");
// Jika waktu yang ditentukan sama dengan atau lebih akhir daripada waktu modifikasi terakhir objek, objek akan diunduh. Jika tidak, kesalahan 412 Precondition failed dikembalikan.
// headers.put(OSSHeaders.GET_OBJECT_IF_UNMODIFIED_SINCE, "Fri, 13 Nov 2015 14:47:53 GMT");
// Jika ETag yang ditentukan sesuai dengan ETag objek, objek akan diunduh. Jika tidak, kesalahan 412 Precondition failed dikembalikan.
// headers.put(OSSHeaders.GET_OBJECT_IF_MATCH, "5B3C1A2E0563E1B002CC607C*****");
// Jika ETag yang ditentukan tidak sesuai dengan ETag objek, objek akan diunduh. Jika tidak, kesalahan 304 Not modified dikembalikan.
// headers.put(OSSHeaders.GET_OBJECT_IF_NONE_MATCH, "5B3C1A2E0563E1B002CC607C*****");
GetObjectRequest get = new GetObjectRequest(bucketName, objectKey);
get.setRequestHeaders(headers);
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// Permintaan berhasil.
InputStream inputStream = result.getObjectContent();
byte[] buffer = new byte[2048];
int len;
try {
while ((len = inputStream.read(buffer)) != -1) {
// Proses data yang diunduh.
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Permintaan gagal.
if (clientExcepion != null) {
// Terjadi exception pada client, seperti exception jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Terjadi exception pada layanan.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Referensi
Untuk kode contoh lengkap yang digunakan untuk melakukan unduhan bersyarat, kunjungi GitHub.
Untuk informasi selengkapnya tentang Operasi API yang dapat Anda panggil untuk melakukan unduhan bersyarat, lihat GetObject.
Untuk informasi selengkapnya tentang cara menginisialisasi instans OSSClient, lihat Inisialisasi.