Cloud Storage for Firebase আপনাকে আপনার Cloud Storage বাকেটের বিষয়বস্তু তালিকাভুক্ত করার সুযোগ দেয়। এসডিকেগুলো বর্তমান Cloud Storage রেফারেন্সের অধীনে থাকা অবজেক্টগুলোর আইটেম এবং প্রিফিক্স উভয়ই ফেরত দেয়।
যে প্রজেক্টগুলো লিস্ট এপিআই (list API) ব্যবহার করে Cloud Storage for Firebase Rules version 2) প্রয়োজন। আপনার যদি আগে থেকেই কোনো ফায়ারবেস প্রজেক্ট থাকে, তবে সিকিউরিটি রুলস গাইড (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(completion:) ব্যবহার করতে পারেন। এটি ছোট ডিরেক্টরির জন্য সবচেয়ে ভালো, কারণ সমস্ত ফলাফল মেমরিতে বাফার করা থাকে। এছাড়াও, প্রক্রিয়া চলাকালীন কোনো অবজেক্ট যোগ বা অপসারণ করা হলে এই অপারেশনটি একটি সামঞ্জস্যপূর্ণ স্ন্যাপশট নাও দিতে পারে।
বড় তালিকার জন্য paginated list(withMaxResults:completion:) পদ্ধতিটি ব্যবহার করুন, কারণ listAll(completion:) সমস্ত ফলাফল মেমরিতে বাফার করে।
নিম্নলিখিত উদাহরণটি listAll(completion:) ব্যবহার প্রদর্শন করে।
সুইফট
let storageReference = storage.reference().child("files/uid") do { let result = try await storageReference.listAll() for prefix in result.prefixes { // The prefixes under storageReference. // You may call listAll(completion:) recursively on them. } for item in result.items { // The items under storageReference. } } catch { // ... }
উদ্দেশ্য-সি
FIRStorageReference *storageReference = [storage reference]; [storageReference listAllWithCompletion:^(FIRStorageListResult *result, NSError *error) { if (error != nil) { // ... } for (FIRStorageReference *prefix in result.prefixes) { // All the prefixes under storageReference. // You may call listAllWithCompletion: recursively on them. } for (FIRStorageReference *item in result.items) { // All items under storageReference. } }];
তালিকার ফলাফল পৃষ্ঠাঙ্কন করুন
list(withMaxResults:completion:) API-টি যে সংখ্যক ফলাফল ফেরত দেয়, তার উপর একটি সীমা নির্ধারণ করে। list(withMaxResults:completion) একটি সামঞ্জস্যপূর্ণ পেজভিউ প্রদান করে এবং একটি পেজটোকেন প্রকাশ করে, যা অতিরিক্ত ফলাফল কখন ফেচ করতে হবে তার উপর নিয়ন্ত্রণ রাখতে সাহায্য করে।
পেজটোকেনটি পূর্ববর্তী ফলাফলে ফেরত আসা সর্বশেষ আইটেমের পাথ এবং ভার্সন এনকোড করে। পেজটোকেন ব্যবহার করে করা পরবর্তী কোনো অনুরোধে, পেজটোকেনের পরে আসা আইটেমগুলো দেখানো হয়।
নিম্নলিখিত উদাহরণটি একটি ফলাফলকে পৃষ্ঠাঙ্কিত করার পদ্ধতি প্রদর্শন করে:
সুইফট
func listAllPaginated(pageToken: String? = nil) async throws { let storage = Storage.storage() let storageReference = storage.reference().child("files/uid") let listResult: StorageListResult if let pageToken = pageToken { listResult = try await storageReference.list(maxResults: 100, pageToken: pageToken) } else { listResult = try await storageReference.list(maxResults: 100) } let prefixes = listResult.prefixes let items = listResult.items // Handle list result // ... // Process next page if let token = listResult.pageToken { try await listAllPaginated(pageToken: token) } }
উদ্দেশ্য-সি
- (void)paginateFilesAtReference:(FIRStorageReference *)reference pageToken:(nullable NSString *)pageToken { void (^pageHandler)(FIRStorageListResult *_Nonnull, NSError *_Nullable) = ^(FIRStorageListResult *result, NSError *error) { if (error != nil) { // ... } NSArray *prefixes = result.prefixes; NSArray *items = result.items; // ... // Process next page if (result.pageToken != nil) { [self paginateFilesAtReference:reference pageToken:result.pageToken]; } }; if (pageToken != nil) { [reference listWithMaxResults:100 pageToken:pageToken completion:pageHandler]; } else { [reference listWithMaxResults:100 completion:pageHandler]; } }
ত্রুটিগুলি পরিচালনা করুন
আপনার সিকিউরিটি রুলস ভার্সন ২-এ আপগ্রেড করা না থাকলে লিস্ট এপিআই-এর মেথডগুলো কাজ করবে না। এই এররটি দেখতে পেলে আপনার সিকিউরিটি রুলস আপগ্রেড করুন:
Listing objects in a bucket is disallowed for rules_version = "1".
Please update storage security rules to rules_version = "2" to use list.
অন্যান্য সম্ভাব্য ত্রুটিগুলো নির্দেশ করতে পারে যে ব্যবহারকারীর সঠিক অনুমতি নেই। ত্রুটি সম্পর্কে আরও তথ্য ‘ত্রুটি পরিচালনা’ অংশে পাওয়া যাবে।