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

Firebase के लिए Cloud Storage की मदद से Cloud Storage बकेट. SDK टूल के आइटम और प्रीफ़िक्स, दोनों दिखते हैं ऑब्जेक्ट की जानकारी मिल जाएगी.

List API का इस्तेमाल करने वाले प्रोजेक्ट के लिए, Firebase के लिए Cloud Storage की ज़रूरत होती है नियम का वर्��न 2. अगर आपके पास कोई मौजूदा Firebase प्रोजेक्ट है, तो उसमें दिया गया तरीका अपनाएं सुरक्षा के नियमों की गाइड पढ़ें.

list() Google Cloud Storage सूची एपीआई. 'Firebase के लिए Cloud Storage' में, हम / का इस्तेमाल डीलिमिटर के तौर पर करते हैं. इसकी मदद से, हम ये काम कर पाते हैं इससे फ़ाइल सिस्टम सिमैंटिक को एम्युलेट किया जा सकता है. बड़े स्तर के असरदार ट्रैवर्सल की अनुमति देने के लिए, हैरारकी वाले Cloud Storage बकेट, लिस्ट एपीआई, प्रीफ़िक्स दिखाता है और आइटम अलग से रखें. उदाहरण के लिए, अगर आपने /images/uid/file1 फ़ाइल अपलोड की है,

  • root.child('images').listAll(), /images/uid को प्रीफ़िक्स के तौर पर दिखाएगा.
  • root.child('images/uid').listAll(), फ़ाइल को आइटम के तौर पर दिखाएगा.

'Firebase के लिए Cloud Storage' SDK टूल ऐसे ऑब्जेक्ट पाथ नहीं दिखाता जिनमें दो शामिल हों लगातार / या / पर खत्म करें. उदाहरण के लिए, एक ऐसी बकेट पर विचार करें जिसमें ये ऑब्जेक्ट शामिल हैं:

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

इस बकेट में मौजूद आइटम पर की जाने वाली कार्रवाइयों की सूची से ये नतीजे मिलेंगे:

  • रूट में तय की गई कार्रवाई, correctPrefix के रेफ़रंस वापस करती है, prefixes के तौर पर wrongPrefix और lonelyItem.
  • correctPrefix/ पर सूची कार्रवाई, रेफ़रंस को रिटर्न करती है items के तौर पर correctPrefix/happyItem.
  • 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);
}

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

अगर आपने खाते को अपग्रेड नहीं किया है, तो 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.

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