ফায়ারবেসের জন্য ক্লাউড স্টোরেজ আপনাকে আপনার ক্লাউড স্টোরেজ বাকেটের বিষয়বস্তু তালিকাভুক্ত করার সুযোগ দেয়। এসডিকেগুলো বর্তমান ক্লাউড স্টোরেজ রেফারেন্সের অধীনে থাকা অবজেক্টগুলোর আইটেম এবং প্রিফিক্স উভয়ই ফেরত দেয়।
যে প্রজেক্টগুলো লিস্ট এপিআই (List API) ব্যবহার করে, সেগুলোর জন্য ফায়ারবেস রুলস (Firebase Rules) ভার্সন ২-এর জন্য ক্লাউড স্টোরেজ (Cloud Storage) প্রয়োজন। আপনার যদি আগে থেকেই কোনো ফায়ারবেস প্রজেক্ট থাকে, তবে সিকিউরিটি রুলস গাইড (Security Rules Guide )-এ দেওয়া ধাপগুলো অনুসরণ করুন।
list() ফাংশনটি গুগল ক্লাউড স্টোরেজ লিস্ট এপিআই (Google 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 প্রদর্শন করে।
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() API যে সংখ্যক ফলাফল ফেরত দেয়, তার উপর একটি সীমা আরোপ করে। list() একটি সামঞ্জস্যপূর্ণ পেজভিউ প্রদান করে এবং একটি 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.
অন্যান্য সম্ভাব্য ত্রুটিগুলো নির্দেশ করতে পারে যে ব্যবহারকারীর সঠিক অনুমতি নেই। ত্রুটি সম্পর্কে আরও তথ্য 'ত্রুটি পরিচালনা' পৃষ্ঠায় পাওয়া যাবে।