Tampilkan daftar objek dalam sebuah bucket berdasarkan jumlah, awalan (prefix), atau rentang alfabetis, dengan dukungan penjelajahan halaman (paging) untuk set hasil yang besar dan pengkodean URL (URL encoding) pada nama objek yang mengandung karakter khusus.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans
OSSClientyang telah diinisialisasi. Untuk detailnya, lihat Inisialisasi.
Menampilkan jumlah objek tertentu
Atur MaxKeys untuk mengontrol jumlah objek yang dikembalikan dalam satu panggilan. Contoh berikut mengembalikan hingga 20 objek dari examplebucket.
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Atur jumlah maksimum objek yang akan dikembalikan. Default: 100. Maksimum: 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) {
if (clientException != null) {
// Kesalahan sisi client, seperti kegagalan jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Kesalahan sisi server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Menampilkan objek berdasarkan awalan (prefix)
Atur awalan (prefix) untuk memfilter objek yang namanya diawali dengan string tertentu. Contoh berikut mengembalikan objek yang namanya diawali dengan file di dalam examplebucket.
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Atur prefix. Mengembalikan semua objek yang namanya diawali dengan "file",
// misalnya file1.txt dan file-archive.zip.
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) {
if (clientException != null) {
clientException.printStackTrace();
}
if (serviceException != null) {
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Menampilkan objek setelah marker tertentu
Atur marker untuk memulai penampilan daftar dari posisi tertentu. Operasi daftar ini mengembalikan objek yang namanya secara alfabetis berada setelah marker tersebut—marker itu sendiri tidak disertakan. Jika marker tidak ada di dalam bucket, penampilan daftar dimulai dari objek berikutnya dalam urutan alfabetis.
Contoh berikut menampilkan objek yang muncul setelah exampleobject.txt di dalam examplebucket.
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Atur marker. Daftar dimulai dari objek pertama secara alfabetis setelah "exampleobject.txt".
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) {
if (clientException != null) {
clientException.printStackTrace();
}
if (serviceException != null) {
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Menampilkan semua objek per halaman
Untuk menjelajahi seluruh isi bucket secara halaman demi halaman, gunakan isTruncated dan NextMarker secara bersamaan: jika isTruncated() mengembalikan nilai true, artinya hasil dipotong dan getNextMarker() memberikan titik awal untuk halaman berikutnya. Ketika isTruncated() mengembalikan nilai false, Anda telah mencapai halaman terakhir.
Contoh berikut menampilkan semua objek di dalam examplebucket dengan maksimal 20 objek per halaman.
private String marker = null;
private boolean isCompleted = false;
// Jelajahi semua objek per halaman.
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// Blokir thread saat ini hingga permintaan halaman selesai,
// sehingga NextMarker tersedia sebelum iterasi berikutnya.
// Sesuaikan strategi pemblokiran ini dengan model threading aplikasi Anda.
task.waitUntilFinished();
} while (!isCompleted);
}
// Ambil satu halaman objek.
public OSSAsyncTask getObjectList() {
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Atur jumlah maksimum objek per halaman. Default: 100. Maksimum: 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());
}
if (!result.isTruncated()) {
// Tidak ada halaman lagi.
isCompleted = true;
return;
}
// Gunakan NextMarker sebagai marker untuk halaman berikutnya.
marker = result.getNextMarker();
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
isCompleted = true;
if (clientException != null) {
clientException.printStackTrace();
}
if (serviceException != null) {
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
return task;
}Menampilkan objek berdasarkan awalan (prefix), per halaman
Gabungkan pemfilteran berdasarkan awalan (prefix) dengan penjelajahan halaman untuk mengiterasi set hasil yang difilter dan berukuran besar. Contoh berikut menampilkan objek yang namanya diawali dengan file di dalam examplebucket, 20 objek per halaman.
private String marker = null;
private boolean isCompleted = false;
// Jelajahi semua objek dengan prefix "file".
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
task.waitUntilFinished();
} while (!isCompleted);
}
// Ambil satu halaman objek.
public OSSAsyncTask getObjectList() {
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Atur jumlah maksimum objek per halaman. Default: 100. Maksimum: 1.000.
request.setMaxKeys(20);
// Atur prefix untuk memfilter objek berdasarkan nama.
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());
}
if (!result.isTruncated()) {
// Tidak ada halaman lagi.
isCompleted = true;
return;
}
// Gunakan NextMarker sebagai marker untuk halaman berikutnya.
marker = result.getNextMarker();
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
isCompleted = true;
if (clientException != null) {
clientException.printStackTrace();
}
if (serviceException != null) {
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
return task;
}Menampilkan objek yang namanya mengandung karakter khusus
OSS mendukung pengkodean URL (URL encoding) untuk nama objek yang mengandung karakter khusus. Atur jenis pengkodean menjadi "url" sebelum melakukan permintaan, lalu dekode setiap nama objek yang dikembalikan menggunakan URLDecoder sebelum menggunakannya.
Nama objek yang memerlukan pengkodean URL meliputi yang mengandung:
Tanda kutip tunggal (
')Tanda kutip ganda (
")Ampersand (
&)Tanda kurung sudut (
<>)Karakter Tionghoa
Contoh berikut menampilkan objek yang mengandung karakter khusus di dalam examplebucket.
// Tentukan nama bucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// Aktifkan pengkodean URL 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) {
if (clientException != null) {
clientException.printStackTrace();
}
if (serviceException != null) {
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Hanya pengkodean URL yang didukung di OSS untuk nama objek yang mengandung karakter khusus.
Parameter
Semua contoh menggunakan oss.asyncListObjects() dengan ListObjectsRequest. Tabel berikut merangkum parameter permintaan yang tersedia.
| Parameter | Metode | Tipe | Deskripsi | Default | Maksimum |
|---|---|---|---|---|---|
| Nama bucket | new ListObjectsRequest(name) | String | Nama bucket yang akan ditampilkan daftarnya. | — | — |
| MaxKeys | setMaxKeys(int) | int | Jumlah maksimum objek yang dikembalikan per permintaan. | 100 | 1.000 |
| Prefix | setPrefix(String) | String | Memfilter hasil ke objek yang namanya diawali dengan nilai ini. | — | — |
| Marker | setMarker(String) | String | Mengembalikan objek yang secara alfabetis berada setelah nilai ini. Gunakan getNextMarker() dari respons sebelumnya untuk maju ke halaman berikutnya. | — | — |
| Jenis pengkodean | setEncodingType(String) | String | Pengkodean yang diterapkan pada nama objek dalam respons. Atur ke "url" ketika nama objek mengandung karakter khusus. | — | — |
Langkah berikutnya
Untuk referensi API dasar, lihat GetBucket (ListObjects) dan ListObjectsV2 (GetBucketV2).
Untuk opsi inisialisasi OSSClient, lihat Inisialisasi.