Firebase के लिए Cloud Storage की मदद से, Cloud Storage बकेट में मौजूद कॉन्टेंट की सूची बनाई जा सकती है. SDK टूल, मौजूदा Cloud Storage रेफ़रंस में मौजूद ऑब्जेक्ट के आइटम और प्रीफ़िक्स, दोनों दिखाते हैं.
List API का इस्तेमाल करने वाले प्रोजेक्ट के लिए, Firebase के लिए Cloud Storage के नियमों का वर्शन 2 ज़रूरी है. अगर आपके पास कोई मौजूदा Firebase प्रोजेक्ट है, तो सुरक्षा नियमों की गाइड में दिया गया तरीका अपनाएं.
list(), Google Cloud Storage List API का इस्तेमाल करता है.
Firebase के लिए Cloud Storage में, हम / को डीलिमिटर के तौर पर इस्तेमाल करते हैं. इससे हमें फ़ाइल सिस्टम के सिमैंटिक को एम्युलेट करने में मदद मिलती है. List API, प्रीफ़िक्स और आइटम अलग-अलग दिखाता है. इससे, Cloud Storage की बड़ी और हैरारकी वाली बकेट को आसानी से ब्राउज़ किया जा सकता है. उदाहरण के लिए, अगर आपने एक फ़ाइल /images/uid/file1 अपलोड की है,
root.child('images').listAll(), प्रीफ़िक्स के तौर पर/images/uidदिखाएगा.root.child('images/uid').listAll(), फ़ाइल को एक आइटम के तौर पर दिखाएगा.
Firebase के लिए Cloud Storage का SDK टूल, ऐसे ऑब्जेक्ट पाथ नहीं दिखाता जिनमें लगातार दो / हों या जो / पर खत्म होते हों. उदाहरण के लिए, मान लें कि किसी बकेट में ये ऑब्जेक्ट हैं:
correctPrefix/happyItemwrongPrefix//sadItemlonelyItem/
इस बकेट में मौजूद आइटम पर सूची से जुड़े ऑपरेशन करने पर, ये नतीजे मिलेंगे:
- रूट पर मौजूद सूची की कार्रवाई,
correctPrefix,wrongPrefix, औरlonelyItemके रेफ़रंस कोprefixesके तौर पर दिखाती है. correctPrefix/पर मौजूद सूची ऑपरेशन,correctPrefix/happyItemके रेफ़रंस कोitemsके तौर पर दिखाता है.wrongPrefix/पर मौजूद सूची से कोई रेफ़रंस नहीं मिलता, क्योंकिwrongPrefix//sadItemमें लगातार दो/शामिल हैं.lonelyItem/पर मौजूद सूची की कार्रवाई से कोई रेफ़रंस नहीं मिलता, क्योंकि ऑब्जेक्टlonelyItem/,/पर खत्म होता है.
सभी फ़ाइलों की सूची बनाएं
किसी डायरेक्ट्री के सभी नतीजे फ़ेच करने के लिए, listAll का इस्तेमाल किया जा सकता है.
इसका इस्तेमाल छोटी डायरेक्ट्री के लिए सबसे सही होता है, क्योंकि सभी नतीजे मेमोरी में बफ़र होते हैं.
अगर प्रोसेस के दौरान ऑब्जेक्ट जोड़े या हटाए जाते हैं, तो हो सकता है कि कार्रवाई से एक जैसा स्नैपशॉट न मिले.
बड़ी सूची के लिए, पेज में बंटे list() तरीके का इस्तेमाल करें, क्योंकि listAll() सभी नतीजों को मेमोरी में बफ़र करता है.
यहां दिए गए उदाहरण में, listAll के बारे में बताया गया है.
final storageRef = FirebaseStorage.instance.ref().child("files/uid");
final listResult = await storageRef.listAll();
for (var prefix in listResult.prefixes) {
// The prefixes under storageRef.
// You can call listAll() recursively on them.
}
for (var item in listResult.items) {
// The items under storageRef.
}
नतीजों की सूची को पेज के हिसाब से बांटना
list() एपीआई, नतीजों की संख्या को सीमित करता है. list() एक जैसा पेज व्यू उपलब्ध कराता है और pageToken को एक्सपोज़ करता है. इससे यह कंट्रोल किया जा सकता है कि ज़्यादा नतीजे कब फ़ेच किए जाएं.
pageToken, पिछले नतीजे में दिखाए गए आखिरी आइटम के पाथ और वर्शन को एन्कोड करता है. pageToken का इस्तेमाल करके किए गए अगले अनुरोध में, pageToken के बाद आने वाले आइटम दिखाए जाते हैं.
नीचे दिए गए उदाहरण में, नतीजे को पेज में बांटने का तरीका बताया गया है:
Stream<ListResult> listAllPaginated(Reference storageRef) async* {
String? pageToken;
do {
final listResult = await storageRef.list(ListOptions(
maxResults: 100,
pageToken: pageToken,
));
yield listResult;
pageToken = listResult.nextPageToken;
} while (pageToken != null);
}
गड़बड़ियां ठीक करना
अगर आपने सुरक्षा के नियमों को वर्शन 2 पर अपग्रेड नहीं किया है, तो list() और listAll() काम नहीं करेंगे. अगर आपको यह गड़बड़ी दिखती है, तो अपने सुरक्षा नियमों को अपग्रेड करें:
Listing objects in a bucket is disallowed for rules_version = "1".
Please update storage security rules to rules_version = "2" to use list.
अन्य गड़बड़ियां यह बता सकती हैं कि उपयोगकर्ता के पास सही अनुमति नहीं है. गड़बड़ियों के बारे में ज़्यादा जानकारी, गड़बड़ियों को ठीक करना पेज पर मिल सकती है.