Dengan Cloud Storage for Firebase, Anda dapat membuat daftar isi bucket Cloud Storage. SDK menampilkan item dan awalan objek berdasarkan referensi Cloud Storage saat ini.
Project yang menggunakan List API membutuhkan Aturan Cloud Storage for Firebase Versi 2. Jika Anda sudah memiliki project Firebase, ikuti langkah-langkah dalam Panduan Aturan Keamanan.
list()
menggunakan Google Cloud Storage List API.
Di Cloud Storage for Firebase, kita menggunakan /
sebagai pemisah, sehingga kita dapat mengemulasikan semantik sistem file. Agar traversal bucket Cloud Storage yang besar dan hierarkis menjadi efisien, List API menampilkan awalan dan item secara terpisah. Misalnya, jika Anda mengupload satu file /images/uid/file1
,
root.child('images').listAll()
akan menampilkan/images/uid
sebagai awalan.root.child('images/uid').listAll()
akan menampilkan file sebagai item.
Cloud Storage for Firebase SDK tidak menampilkan jalur objek yang berisi dua /
berturut-turut atau diakhiri dengan tanda /.
. Misalnya, pertimbangkan bucket yang memiliki objek berikut:
correctPrefix/happyItem
wrongPrefix//sadItem
lonelyItem/
Operasi daftar pada item dalam bucket ini akan memberikan hasil berikut:
- Operasi daftar di root akan menampilkan referensi ke
correctPrefix
,wrongPrefix
, danlonelyItem
sebagaiprefixes
. - Operasi daftar di
correctPrefix/
akan menampilkan referensi kecorrectPrefix/happyItem
sebagaiitems
. - Operasi daftar di
wrongPrefix/
tidak akan menampilkan referensi apa pun karenawrongPrefix//sadItem
berisi dua/
berturut-turut. - Operasi daftar di
lonelyItem/
tidak akan menampilkan referensi apa pun karena objeklonelyItem/
diakhiri dengan tanda/
.
Membuat daftar semua file
Anda dapat menggunakan listAll
untuk mengambil semua hasil untuk direktori.
Cara ini paling baik digunakan untuk direktori kecil karena semua hasil di-buffer di memori.
Operasi tersebut juga tidak dapat menampilkan snapshot yang konsisten jika objek ditambahkan atau dihapus selama proses ini.
Untuk daftar besar, gunakan metode list()
yang diberi nomor halaman, karena listAll()
akan mem-buffer semua
hasil dalam memori.
Contoh berikut menunjukkan listAll
.
Web
import { getStorage, ref, listAll } from "firebase/storage"; const storage = getStorage(); // Create a reference under which you want to list const listRef = ref(storage, 'files/uid'); // Find all the prefixes and items. listAll(listRef) .then((res) => { res.prefixes.forEach((folderRef) => { // All the prefixes under listRef. // You may call listAll() recursively on them. }); res.items.forEach((itemRef) => { // All the items under listRef. }); }).catch((error) => { // Uh-oh, an error occurred! });
Web
// Create a reference under which you want to list var listRef = storageRef.child('files/uid'); // Find all the prefixes and items. listRef.listAll() .then((res) => { res.prefixes.forEach((folderRef) => { // All the prefixes under listRef. // You may call listAll() recursively on them. }); res.items.forEach((itemRef) => { // All the items under listRef. }); }).catch((error) => { // Uh-oh, an error occurred! });
Memberi nomor halaman pada hasil daftar
API list()
memberikan batasan pada jumlah hasil yang ditampilkannya. list()
menghasilkan kunjungan halaman yang konsisten, serta menampilkan pageToken yang dapat digunakan untuk mengontrol waktu pengambilan hasil tambahan.
PageToken mengenkode jalur dan versi item terakhir yang ditampilkan dalam hasil sebelumnya. Dalam permintaan berikutnya yang menggunakan pageToken, item setelah pageToken akan ditampilkan.
Contoh berikut menunjukkan pemberian nomor halaman pada hasil menggunakan async/await
.
Web
import { getStorage, ref, list } from "firebase/storage"; async function pageTokenExample(){ // Create a reference under which you want to list const storage = getStorage(); const listRef = ref(storage, 'files/uid'); // Fetch the first page of 100. const firstPage = await list(listRef, { maxResults: 100 }); // Use the result. // processItems(firstPage.items) // processPrefixes(firstPage.prefixes) // Fetch the second page if there are more elements. if (firstPage.nextPageToken) { const secondPage = await list(listRef, { maxResults: 100, pageToken: firstPage.nextPageToken, }); // processItems(secondPage.items) // processPrefixes(secondPage.prefixes) } }
Web
async function pageTokenExample(){ // Create a reference under which you want to list var listRef = storageRef.child('files/uid'); // Fetch the first page of 100. var firstPage = await listRef.list({ maxResults: 100}); // Use the result. // processItems(firstPage.items) // processPrefixes(firstPage.prefixes) // Fetch the second page if there are more elements. if (firstPage.nextPageToken) { var secondPage = await listRef.list({ maxResults: 100, pageToken: firstPage.nextPageToken, }); // processItems(secondPage.items) // processPrefixes(secondPage.prefixes) } }
Menangani error
list()
dan listAll()
menampilkan Promise yang ditolak jika Anda belum mengupgrade
Aturan Keamanan ke versi 2. Upgrade Aturan Keamanan jika Anda melihat pesan error ini:
Listing objects in a bucket is disallowed for rules_version = "1".
Please update storage security rules to rules_version = "2" to use list.
Error lainnya dapat menunjukkan bahwa pengguna tidak memiliki izin yang tepat. Informasi lebih lanjut mengenai error dapat ditemukan di bagian Menangani Error.