Topik ini menjelaskan cara mendaftar objek dalam sebuah bucket, termasuk semua objek dalam bucket, sejumlah objek tertentu, serta objek yang namanya mengandung awalan tertentu.
Usage notes
-
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 Initialization (Android SDK).
Daftar jumlah 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) {
// Tangani exception permintaan.
if (clientException != null) {
// Tangani exception sisi klien, seperti error jaringan.
clientException.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());
}
}
});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.
// Mengembalikan semua objek yang namanya dimulai dengan awalan yang ditentukan. Misalnya, awalan 'a' mengembalikan objek seperti abc.txt dan abcd.jpg.
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) {
// Tangani exception permintaan.
if (clientException != null) {
// Tangani exception sisi klien, seperti error jaringan.
clientException.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());
}
}
});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");
// Daftar objek yang secara alfabetis mengikuti marker.
// Jika marker tidak sesuai dengan objek yang ada, daftar dimulai dari posisi alfabetis 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) {
// Tangani exception permintaan.
if (clientException != null) {
// Tangani exception sisi klien, seperti error jaringan.
clientException.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());
}
}
});Daftar semua objek dalam bucket secara berhalaman
Kode contoh berikut menunjukkan cara mendaftar semua objek dalam bucket bernama examplebucket secara berhalaman. Maksimal 20 objek dapat didaftarkan per halaman.
private String marker = null;
private boolean isCompleted = false;
// Daftar semua objek secara berhalaman.
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// Blokir thread untuk mendapatkan NextMarker. Untuk mengambil halaman berikutnya, atur marker ke nilai NextMarker dari respons sebelumnya. Tidak diperlukan marker untuk halaman pertama.
// Contoh ini memblokir thread dalam loop untuk mendapatkan NextMarker guna paginasi. Di lingkungan produksi, tentukan apakah perlu memblokir thread berdasarkan kebutuhan aplikasi 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());
}
// Halaman terakhir hasil.
if (!result.isTruncated()) {
isCompleted = true;
return;
}
// Marker untuk halaman hasil berikutnya.
marker = result.getNextMarker();
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
isCompleted = true;
// Tangani exception permintaan.
if (clientException != null) {
// Tangani exception sisi klien, seperti error jaringan.
clientException.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());
}
}
});
return task;
}Daftar objek yang namanya mengandung awalan tertentu secara berhalaman
Kode contoh berikut menunjukkan cara mendaftar objek yang namanya mengandung awalan "file" dalam bucket bernama examplebucket secara berhalaman. Maksimal 20 objek dapat didaftarkan per halaman.
private String marker = null;
private boolean isCompleted = false;
// Daftar semua objek dengan awalan tertentu secara berhalaman.
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// Blokir thread untuk mendapatkan NextMarker. Untuk mengambil halaman berikutnya, atur marker ke nilai NextMarker dari respons sebelumnya. Tidak diperlukan marker untuk halaman pertama.
// Contoh ini memblokir thread dalam loop untuk mendapatkan NextMarker guna paginasi. Di lingkungan produksi, tentukan apakah perlu memblokir thread berdasarkan kebutuhan aplikasi 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.
// Mengembalikan semua objek yang namanya dimulai dengan awalan yang ditentukan. Misalnya, awalan 'a' mengembalikan objek seperti abc.txt dan abcd.jpg.
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());
}
// Halaman terakhir hasil.
if (!result.isTruncated()) {
isCompleted = true;
return;
}
// Marker untuk halaman hasil berikutnya.
marker = result.getNextMarker();
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
isCompleted = true;
// Tangani exception permintaan.
if (clientException != null) {
// Tangani exception sisi klien, seperti error jaringan.
clientException.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());
}
}
});
return task;
}Daftar objek yang namanya mengandung karakter khusus
Jika nama objek mengandung salah satu karakter khusus berikut, Anda harus melakukan encode terhadap nama objek tersebut sebelum mentransmisikannya. Hanya URL encoding yang didukung di OSS.
Tanda kutip tunggal (')
Tanda kutip ganda (")
Ampersand (&)
Tanda kurung sudut (<>)
Karakter Tionghoa
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) {
// Tangani exception permintaan.
if (clientException != null) {
// Tangani exception sisi klien, seperti error jaringan.
clientException.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 Operasi API yang dapat Anda panggil untuk mendaftar objek, lihat GetBucket (ListObjects) dan ListObjectsV2(GetBucketV2).
Untuk informasi selengkapnya tentang cara menginisialisasi instans OSSClient, lihat Initialization.