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ğiylewrongPrefix
velonelyItem
. correctPrefix/
öğesindeki liste işlemi,items
olarakcorrectPrefix/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.