Cloud Storage for Firebase verileri, Cloud Storage paketi. SDK'lar hem nesneleri tanımlamak için aşağıdaki adımları uygulayın.
List API'yi kullanan projeler için Cloud Storage for Firebase gerekir 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ıyoruz. Bu sayede
emüle eder. Büyük boyutlu, dikey ve büyük boyutlu öğeler
listesi API'lerinin her biri için önekleri ve
öğeler ayrı ayrı kontrol edin. Ö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
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 söz konusu olduğunda listAll()
arabelleğe aldığı için sayfalara ayrılmış list()
yöntemini kullanın
hafızada kalır.
Aşağıdaki örnekte listAll
gösterilmektedir.
Kotlin+KTX
val storage = Firebase.storage val listRef = storage.reference.child("files/uid") // You'll need to import com.google.firebase.storage.component1 and // com.google.firebase.storage.component2 listRef.listAll() .addOnSuccessListener { (items, prefixes) -> for (prefix in prefixes) { // All the prefixes under listRef. // You may call listAll() recursively on them. } for (item in items) { // All the items under listRef. } } .addOnFailureListener { // Uh-oh, an error occurred! }
Java
StorageReference listRef = storage.getReference().child("files/uid"); listRef.listAll() .addOnSuccessListener(new OnSuccessListener<ListResult>() { @Override public void onSuccess(ListResult listResult) { for (StorageReference prefix : listResult.getPrefixes()) { // All the prefixes under listRef. // You may call listAll() recursively on them. } for (StorageReference item : listResult.getItems()) { // All the items under listRef. } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Uh-oh, an error occurred! } });
Liste sonuçlarını sayfalara ayır
list()
API, döndürdüğü sonuçların sayısını sınırlandırır. list()
.
tutarlı bir sayfa görüntüleme sağlar ve sayfa üzerinde kontrol sağlayan bir pageToken
ek sonuçların ne zaman getirileceğini belirler.
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:
Kotlin+KTX
fun listAllPaginated(pageToken: String?) { val storage = Firebase.storage val listRef = storage.reference.child("files/uid") // Fetch the next page of results, using the pageToken if we have one. val listPageTask = if (pageToken != null) { listRef.list(100, pageToken) } else { listRef.list(100) } // You'll need to import com.google.firebase.storage.component1 and // com.google.firebase.storage.component2 listPageTask .addOnSuccessListener { (items, prefixes, pageToken) -> // Process page of results processResults(items, prefixes) // Recurse onto next page pageToken?.let { listAllPaginated(it) } }.addOnFailureListener { // Uh-oh, an error occurred. } }
Java
public void listAllPaginated(@Nullable String pageToken) { FirebaseStorage storage = FirebaseStorage.getInstance(); StorageReference listRef = storage.getReference().child("files/uid"); // Fetch the next page of results, using the pageToken if we have one. Task<ListResult> listPageTask = pageToken != null ? listRef.list(100, pageToken) : listRef.list(100); listPageTask .addOnSuccessListener(new OnSuccessListener<ListResult>() { @Override public void onSuccess(ListResult listResult) { List<StorageReference> prefixes = listResult.getPrefixes(); List<StorageReference> items = listResult.getItems(); // Process page of results // ... // Recurse onto next page if (listResult.getPageToken() != null) { listAllPaginated(listResult.getPageToken()); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Uh-oh, an error occurred. } }); }
Hataları işleme
Yükseltme yapmadıysanız list()
ve listAll()
başarısız olur.
Güvenlik Kuralları'nı sürüm 2'ye yükselttiniz. Bunu görüyorsanız Güvenlik Kurallarınızı yükseltin
hata:
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 izne sahip olmadığını gösterebilir. Hatalarla ilgili daha fazla bilgiyi şurada bulabilirsiniz: Hataları İşleyin.