Cloud Storage की मदद से वेब पर फ़ाइलों की सूची बनाना

Cloud Storage for Firebase की मदद से, अपनी Cloud Storage बकेट के कॉन्टेंट की सूची देखी जा सकती है. SDK टूल, मौजूदा Cloud Storage रेफ़रंस में, ऑब्जेक्ट और उनके प्रीफ़िक्स, दोनों को दिखाते हैं.

List API का इस्तेमाल करने वाले प्रोजेक्ट के लिए, Cloud Storage for Firebase नियमों का वर्शन 2 ज़रूरी है. अगर आपके पास कोई मौजूदा 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 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() एपीआई, नतीजे दिखाने की सीमा तय करता है. list() एक जैसा पेज व्यू उपलब्ध कराता है और एक पेज टोकन दिखाता है. इससे, अतिरिक्त नतीजे फ़ेच करने के समय को कंट्रोल किया जा सकता है.

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)
  }
}

गड़बड़ियां ठीक करना

अगर आपने सुरक्षा नियमों को वर्शन 2 पर अपग्रेड नहीं किया है, तो 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.

अन्य संभावित गड़बड़ियों से पता चल सकता है कि उपयोगकर्ता के पास सही अनुमति नहीं है. गड़बड़ियों के बारे में ज़्यादा जानकारी पाने के लिए, गड़बड़ियां मैनेज करना पेज पर जाएं.