ওয়েবে ক্লাউড স্টোরেজ সহ ফাইল তালিকাভুক্ত করুন

Cloud Storage for Firebase আপনাকে আপনার Cloud Storage বাকেটের বিষয়বস্তু তালিকাভুক্ত করার সুযোগ দেয়। এসডিকেগুলো বর্তমান Cloud Storage রেফারেন্সের অধীনে থাকা অবজেক্টগুলোর আইটেম এবং প্রিফিক্স উভয়ই ফেরত দেয়।

যে প্রজেক্টগুলো লিস্ট এপিআই (List API) ব্যবহার করে Cloud Storage for Firebase প্রয়োজন। আপনার যদি আগে থেকেই কোনো ফায়ারবেস প্রজেক্ট থাকে, তবে সিকিউরিটি রুলস গাইড (Security Rules Guide)- এ দেওয়া ধাপগুলো অনুসরণ করুন।

list() ফাংশনটি Google Cloud Storage List API) ব্যবহার করে। Cloud Storage for Firebase -এ, আমরা ডিলিমিটার হিসেবে / ব্যবহার করি, যা আমাদের ফাইল সিস্টেমের কার্যপ্রণালী অনুকরণ করতে সাহায্য করে। বড় ও স্তরভিত্তিক Cloud Storage বাকেটগুলোর মধ্যে সহজে চলাচল করার জন্য, লিস্ট এপিআই প্রিফিক্স এবং আইটেমগুলো আলাদাভাবে রিটার্ন করে। উদাহরণস্বরূপ, যদি আপনি /images/uid/file1 একটি ফাইল আপলোড করেন,

  • root.child('images').listAll() প্রিফিক্স হিসেবে /images/uid রিটার্ন করবে।
  • root.child('images/uid').listAll() ফাইলটিকে একটি আইটেম হিসেবে ফেরত দেবে।

Cloud Storage for Firebase SDK এমন অবজেক্ট পাথ ফেরত দেয় না, যেগুলিতে পরপর দুটি / থাকে অথবা যেগুলি /. উদাহরণস্বরূপ, এমন একটি বাকেট বিবেচনা করুন যাতে নিম্নলিখিত অবজেক্টগুলি রয়েছে:

  • correctPrefix/happyItem
  • wrongPrefix//sadItem
  • lonelyItem/

এই বাকেটের আইটেমগুলোর উপর তালিকা অপারেশনগুলো নিম্নলিখিত ফলাফল দেবে:

  • রুটে থাকা লিস্ট অপারেশনটি 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 প্রকাশ করে, যা অতিরিক্ত ফলাফল কখন আনা হবে তার উপর নিয়ন্ত্রণ রাখতে সাহায্য করে।

পেজটোকেনটি পূর্ববর্তী ফলাফলে ফেরত আসা সর্বশেষ আইটেমের পাথ এবং ভার্সন এনকোড করে। পেজটোকেন ব্যবহার করে করা পরবর্তী কোনো অনুরোধে, পেজটোকেনের পরে আসা আইটেমগুলো দেখানো হয়।

নিম্নলিখিত উদাহরণটি 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.

অন্যান্য সম্ভাব্য ত্রুটিগুলো নির্দেশ করতে পারে যে ব্যবহারকারীর সঠিক অনুমতি নেই। ত্রুটি সম্পর্কে আরও তথ্য 'ত্রুটি পরিচালনা' (Handle Errors) অংশে পাওয়া যাবে।