Apple platformlarında Cloud Storage ile dosyaları listeleme

Cloud Storage for Firebase verileri, Cloud Storage paketi. SDK'lar hem öğeleri hem de ön ekleri döndürür mevcut Cloud Storage referansındaki nesnelerin sayısı.

List API'sini kullanan projeler, Firebase için Cloud Storage gerektirir Kural sürümü 2 Mevcut bir Firebase projeniz varsa şuradaki adımları uygulayın: Güvenlik Kuralları Kılavuzu'na göz atın.

list(), Google Cloud Storage List API. Firebase için Cloud Storage'da sınırlayıcı olarak / kullanılır. Bu sayede emüle eder. Büyük boyutlu, uyumlu ve uyumlu metin öğeleri hiyerarşik Cloud Storage paketlerinde, List API'nin önekleri ve öğeleri döndürmesi ayrı olarak düzenleyebilirsiniz. Örneğin, bir dosya (/images/uid/file1) yüklerseniz

  • root.child('images').listAll(), ön ek olarak /images/uid değerini döndürür.
  • root.child('images/uid').listAll(), dosyayı bir öğe olarak döndürür.

Cloud Storage for Firebase SDK'sı iki öğe içeren nesne yollarını döndürmez art arda / veya /. ile biter. Örneğin, nesneler:

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

Bu paketteki öğelerde yapılan liste işlemleri aşağıdaki sonuçları verir:

  • Kökteki liste işlemi correctPrefix referanslarını döndürür. prefixes tekniğiyle wrongPrefix ve lonelyItem.
  • correctPrefix/ öğesindeki liste işlemi, items olarak correctPrefix/happyItem.
  • wrongPrefix/ öğesindeki liste işlemi, herhangi bir referans döndürmüyor. çünkü wrongPrefix//sadItem art arda iki / içerdiğinden emin olun.
  • lonelyItem/ öğesindeki liste işlemi, herhangi bir referans döndürmüyor. çünkü lonelyItem/ nesnesi / ile bitiyor.

Tüm dosyaları listele

Bir dizine ait tüm sonuçları getirmek için listAll(completion:) işlevini kullanabilirsiniz. Tüm sonuçlar bellekte arabelleğe alındığından bu seçenek en çok küçük dizinler için kullanılır. İşlem, nesne eklenirse veya nesne eklenirse tutarlı bir anlık görüntü de döndürmeyebilir. kaldırılır.

Büyük bir liste için sayfalara ayrılmış list(withMaxResults:completion:) yöntemini listAll(completion:), bellekteki tüm sonuçları arabelleğe alır.

Aşağıdaki örnekte listAll(completion:) gösterilmektedir.

Swift

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 {
  // ...
}

Objective-C

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

Liste sonuçlarını sayfalara ayır

list(withMaxResults:completion:) API, sonuç döndürecektir. list(withMaxResults:completion), tutarlı bir sayfa görüntüleme ve ne zaman getirileceği üzerinde kontrol sağlayan bir pageToken gösterme ek sonuçlar.

pageToken, aynı zamanda önceki sonuç. pageToken yöntemini kullanan sonraki bir istekte sayfaToken'ın gösterilmesini sağlamalısınız.

Aşağıdaki örnekte bir sonucu sayfalara ayırma gösterilmektedir:

Swift

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)
  }
}

Objective-C

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

Hataları işleme

Güvenlik Kurallarınızı 2. sürüm olduğundan emin olun. Bu hatayı görüyorsanız Güvenlik Kurallarınızı yükseltin:

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

Diğer olası hatalar, kullanıcının doğru izinlere sahip olmadığını gösterebilir. Hatalarla ilgili daha fazla bilgiyi şurada bulabilirsiniz: Hataları İşleyin.