অ্যাপল প্ল্যাটফর্মে ক্লাউড স্টোরেজ সহ ফাইল তালিকাভুক্ত করুন

Cloud Storage for Firebase আপনাকে আপনার Cloud Storage বাকেটের বিষয়বস্তু তালিকাভুক্ত করতে দেয়। SDK গুলি বর্তমান Cloud Storage রেফারেন্সের অধীনে থাকা বস্তুর আইটেম এবং উপসর্গ উভয়ই ফেরত দেয়।

তালিকা API ব্যবহার করে এমন প্রকল্পগুলির Cloud Storage for Firebase প্রয়োজন। যদি আপনার একটি বিদ্যমান Firebase প্রকল্প থাকে, তাহলে নিরাপত্তা নিয়ম নির্দেশিকাতে ধাপগুলি অনুসরণ করুন।

list() Google Cloud Storage লিস্ট এপিআই ব্যবহার করে। Cloud Storage for Firebase , আমরা / একটি ডিলিমিটার হিসেবে ব্যবহার করি, যা আমাদের ফাইল সিস্টেমের শব্দার্থবিদ্যা অনুকরণ করতে সাহায্য করে। বৃহৎ, শ্রেণিবদ্ধ Cloud Storage বাকেটের দক্ষ ট্র্যাভার্সালের জন্য, লিস্ট এপিআই প্রিফিক্স এবং আইটেমগুলি আলাদাভাবে ফেরত দেয়। উদাহরণস্বরূপ, যদি আপনি একটি ফাইল /images/uid/file1 আপলোড করেন,

  • root.child('images').listAll() /images/uid একটি প্রিফিক্স হিসেবে রিটার্ন করবে।
  • root.child('images/uid').listAll() ফাইলটিকে একটি আইটেম হিসেবে ফেরত দেবে।

Cloud Storage for Firebase এমন অবজেক্ট পাথ ফেরত দেয় না যেখানে পরপর দুটি / s থাকে অথবা /. দিয়ে শেষ হয়। উদাহরণস্বরূপ, এমন একটি বাকেট বিবেচনা করুন যেখানে নিম্নলিখিত অবজেক্ট রয়েছে:

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

এই বাকেটের আইটেমগুলির তালিকার ক্রিয়াকলাপগুলি নিম্নলিখিত ফলাফল দেবে:

  • রুটে থাকা তালিকার ক্রিয়াকলাপটি correctPrefix , wrongPrefix এবং lonelyItem এর রেফারেন্সগুলিকে prefixes হিসেবে ফেরত দেয়।
  • correctPrefix/ এ তালিকার ক্রিয়াকলাপ correctPrefix/happyItem এর রেফারেন্সগুলিকে items হিসাবে ফেরত দেয়।
  • wrongPrefix/ এ তালিকার ক্রিয়াকলাপটি কোনও রেফারেন্স ফেরত দেয় না কারণ wrongPrefix//sadItem পরপর দুটি / s রয়েছে।
  • 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) একটি সামঞ্জস্যপূর্ণ পৃষ্ঠাভিউ প্রদান করে এবং একটি পৃষ্ঠাটোকেন প্রকাশ করে যা অতিরিক্ত ফলাফল কখন আনতে হবে তা নিয়ন্ত্রণ করতে দেয়।

pageToken পূর্ববর্তী ফলাফলে ফিরে আসা শেষ আইটেমের পাথ এবং সংস্করণ এনকোড করে। pageToken ব্যবহার করে পরবর্তী অনুরোধে, pageToken এর পরে আসা আইটেমগুলি দেখানো হয়।

নিম্নলিখিত উদাহরণটি ফলাফলের পৃষ্ঠাঙ্কন প্রদর্শন করে:

সুইফট

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];
  }
}

ত্রুটিগুলি পরিচালনা করুন

যদি আপনি আপনার নিরাপত্তা নিয়মাবলী সংস্করণ ২ তে আপগ্রেড না করে থাকেন তাহলে তালিকা API-এর পদ্ধতিগুলি ব্যর্থ হবে। যদি আপনি এই ত্রুটিটি দেখতে পান তাহলে আপনার নিরাপত্তা নিয়মাবলী আপগ্রেড করুন:

Listing objects in a bucket is disallowed for rules_version = "1".
Please update storage security rules to rules_version = "2" to use list.

অন্যান্য সম্ভাব্য ত্রুটিগুলি ইঙ্গিত দিতে পারে যে ব্যবহারকারীর সঠিক অনুমতি নেই। ত্রুটি সম্পর্কে আরও তথ্য Handle Errors এ পাওয়া যাবে।