Cloud Storage for Firebase به شما امکان میدهد محتویات Cloud Storage bucket خود را فهرست کنید. کیتهای توسعه نرمافزار هم موارد و هم پیشوندهای اشیاء را تحت مرجع Cloud Storage فعلی برمیگردانند.
پروژههایی که از List API استفاده میکنند به Cloud Storage for Firebase نسخه ۲ قوانین نیاز دارند. اگر پروژه Firebase موجودی دارید، مراحل موجود در راهنمای قوانین امنیتی را دنبال کنید.
list() از
Google Cloud Storage List API استفاده میکند.
در Cloud Storage for Firebase، از / بهعنوان جداکننده استفاده میکنیم که به ما امکان میدهد
معناشناسی سیستم فایل را شبیهسازی کنیم. برای امکانپذیر کردن پیمایش کارآمد در دستههای بزرگ و سلسلهمراتبی Cloud Storage،
List API پیشوندها و موارد را بهطور جداگانه برمیگرداند. برای مثال، اگر یک فایل /images/uid/file1 بارگذاری کنید،
root.child('images').listAll()،/images/uidرا بهعنوان پیشوند برمیگرداند.-
root.child('images/uid').listAll()فایل را بهعنوان یک مورد برمیگرداند.
کیت توسعه نرمافزار Cloud Storage for Firebase مسیرهای شیء را که حاوی دو / متوالی باشند یا به /. ختم شوند برنمیگرداند. برای مثال، یک فضای ذخیرهسازی را درنظر بگیرید که دارای
اشیاء زیر است:
correctPrefix/happyItemwrongPrefix//sadItemlonelyItem/
عملیات فهرست روی موارد موجود در این دسته نتایج زیر را ارائه میدهد:
- عملیات فهرست در ریشه، ارجاعها به
correctPrefix،wrongPrefix، وlonelyItemرا بهعنوانprefixesبرمیگرداند. - عملیات فهرست در
correctPrefix/مرجعها را بهcorrectPrefix/happyItemبهعنوانitemsبرمیگرداند. - عملیات فهرست در
wrongPrefix/هیچ مرجعی را برنمیگرداند زیراwrongPrefix//sadItemحاوی دو/متوالی است. - عملیات فهرست در
lonelyItem/هیچ مرجعی را برنمیگرداند زیرا شیءlonelyItem/با/بهپایان میرسد.
فهرست کردن همه فایلها
میتوانید از listAll برای واکشی همه نتایج یک دایرکتوری استفاده کنید.
این گزینه برای دایرکتوریهای کوچک بهترین است زیرا همه نتایج در حافظه میانگیر میشوند.
همچنین اگر اشیاء درطول فرایند اضافه یا حذف شوند، ممکن است عملیات عکس آنی ثابتی را برنگرداند.
برای فهرستهای بزرگ، از روش صفحهبندیشده list() استفاده کنید زیرا listAll() همه نتایج را در حافظه میانگیر میکند.
مثال زیر 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! });
صفحهبندی نتایج فهرست
list() API برای تعداد نتایجی که برمیگرداند محدودیت تعیین میکند. list()
نمای صفحه ثابتی ارائه میدهد و pageToken را نشان میدهد که امکان کنترل بر
زمان واکشی نتایج بیشتر را فراهم میکند.
pageToken مسیر و نسخه آخرین مورد برگرداندهشده در نتیجه قبلی را کدگذاری میکند. در درخواست بعدی بااستفاده از pageToken، مواردی که بعداز pageToken میآیند نشان داده میشوند.
مثال زیر صفحهبندی نتیجه را بااستفاده از 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) } }
مدیریت کردن خطاها
اگر «قوانین امنیتی» را به نسخه ۲ ارتقا نداده باشید، list() و listAll() یک Promise ردشده برمیگردانند. اگر این خطا را دیدید، «قوانین امنیتی» خود را ارتقا دهید:
Listing objects in a bucket is disallowed for rules_version = "1".
Please update storage security rules to rules_version = "2" to use list.
خطاهای احتمالی دیگر ممکن است نشان دهد که کاربر اجازه لازم را ندارد. اطلاعات بیشتر درباره خطاها را میتوانید در رسیدگی به خطاها پیدا کنید.