Topik ini menjelaskan cara mendaftar objek dalam sebuah bucket, termasuk semua objek dalam bucket tersebut, sejumlah objek tertentu, serta objek yang namanya mengandung awalan tertentu.
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).
Daftar sejumlah objek tertentu
Kode contoh berikut menunjukkan cara mendaftar 20 objek dalam bucket bernama examplebucket:
// Tentukan nama bucket, misalnya examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Tentukan jumlah maksimum objek yang akan dikembalikan. Jika parameter ini tidak diatur, nilai default-nya adalah 100. Nilai maxkeys tidak boleh lebih dari 1.000.
request.setMaxKeys(20);
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Daftar objek yang namanya mengandung awalan tertentu
Kode contoh berikut menunjukkan cara mendaftar objek yang namanya mengandung awalan "file" dalam bucket bernama examplebucket:
// Tentukan nama bucket, misalnya examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Tentukan awalan.
// Awalan digunakan untuk pencocokan fuzzy. Kueri akan mengembalikan objek yang namanya diawali dengan awalan yang ditentukan. Misalnya, jika Anda mengatur awalan menjadi "a", semua objek yang namanya diawali dengan "a", seperti abc.txt dan abcd.jpg, akan dikembalikan.
request.setPrefix("file");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Daftar objek yang namanya secara alfabetis berada setelah nilai marker
Kode contoh berikut menunjukkan cara mendaftar objek yang namanya secara alfabetis berada setelah objek bernama exampleobject.txt dalam bucket bernama examplebucket:
// Tentukan nama bucket, misalnya examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Tentukan marker. Operasi daftar dimulai dari objek pertama yang secara alfabetis berada setelah marker.
// Jika marker yang ditentukan tidak ada dalam bucket, operasi daftar dimulai dari objek yang secara alfabetis berada setelah nilai marker tersebut.
request.setMarker("exampleobject.txt");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Daftar semua objek dalam bucket secara per halaman
Kode contoh berikut menunjukkan cara mendaftar semua objek dalam bucket bernama examplebucket secara per halaman, dengan maksimal 20 objek per halaman.
private String marker = null;
private boolean isCompleted = false;
// Daftar semua objek secara per halaman.
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// Blokir thread dan tunggu hingga permintaan selesai untuk mendapatkan NextMarker. Untuk meminta halaman berikutnya, atur marker ke nilai NextMarker dari respons sebelumnya. Anda tidak perlu mengatur marker untuk halaman pertama.
// Dalam contoh ini, loop digunakan untuk mendaftar data secara per halaman. Anda harus memblokir thread dan menunggu hingga permintaan selesai untuk mendapatkan NextMarker sebelum meminta halaman berikutnya. Tentukan apakah perlu memblokir thread berdasarkan skenario Anda.
task.waitUntilFinished();
} while (!isCompleted);
}
// Daftar satu halaman objek.
public OSSAsyncTask getObjectList() {
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Tentukan jumlah maksimum objek yang dikembalikan per halaman. Jika parameter ini tidak diatur, nilai default-nya adalah 100. Nilai maxkeys tidak boleh lebih dari 1.000.
request.setMaxKeys(20);
request.setMarker(marker);
OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
// Ini adalah halaman terakhir.
if (!result.isTruncated()) {
isCompleted = true;
return;
}
// Marker untuk operasi daftar berikutnya.
marker = result.getNextMarker();
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
isCompleted = true;
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
return task;
}Daftar objek yang namanya mengandung awalan tertentu secara per halaman
Kode contoh berikut menunjukkan cara mendaftar objek yang namanya mengandung awalan "file" dalam bucket bernama examplebucket secara per halaman, dengan maksimal 20 objek per halaman.
private String marker = null;
private boolean isCompleted = false;
// Daftar semua objek secara per halaman.
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// Blokir thread dan tunggu hingga permintaan selesai untuk mendapatkan NextMarker. Untuk meminta halaman berikutnya, atur marker ke nilai NextMarker dari respons sebelumnya. Anda tidak perlu mengatur marker untuk halaman pertama.
// Dalam contoh ini, loop digunakan untuk mendaftar data secara per halaman. Anda harus memblokir thread dan menunggu hingga permintaan selesai untuk mendapatkan NextMarker sebelum meminta halaman berikutnya. Tentukan apakah perlu memblokir thread berdasarkan skenario Anda.
task.waitUntilFinished();
} while (!isCompleted);
}
// Daftar satu halaman objek.
public OSSAsyncTask getObjectList() {
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Tentukan jumlah maksimum objek yang dikembalikan per halaman. Jika parameter ini tidak diatur, nilai default-nya adalah 100. Nilai maxkeys tidak boleh lebih dari 1.000.
request.setMaxKeys(20);
// Tentukan awalan.
// Awalan digunakan untuk pencocokan fuzzy. Kueri akan mengembalikan objek yang namanya diawali dengan awalan yang ditentukan. Misalnya, jika Anda mengatur awalan menjadi "a", semua objek yang namanya diawali dengan "a", seperti abc.txt dan abcd.jpg, akan dikembalikan.
request.setPrefix("file");
request.setMarker(marker);
OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
// Ini adalah halaman terakhir.
if (!result.isTruncated()) {
isCompleted = true;
return;
}
// Marker untuk operasi daftar berikutnya.
marker = result.getNextMarker();
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
isCompleted = true;
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
return task;
}Daftar objek yang namanya mengandung karakter khusus
Jika nama suatu objek mengandung salah satu karakter khusus berikut, Anda harus melakukan encode terhadap nama objek tersebut sebelum mentransmisikannya. OSS hanya mendukung URL encoding.
Tanda kutip tunggal (')
Tanda kutip ganda (")
Ampersand (&)
Tanda kurung sudut (<>)
Huruf Tiongkok
Kode contoh berikut menunjukkan cara mendaftar objek yang namanya mengandung karakter khusus dalam bucket bernama examplebucket:
// Tentukan nama bucket, misalnya examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Tentukan jenis encoding untuk nama objek.
request.setEncodingType("url");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", URLDecoder.decode(objectSummary.getKey(), "UTF-8"));
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian 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 Operasi API yang dapat Anda panggil untuk mendaftar objek, lihat GetBucket (ListObjects) dan ListObjectsV2(GetBucketV2).
Untuk informasi selengkapnya tentang cara menginisialisasi instans OSSClient, lihat Inisialisasi.