Cloud Storage for Firebase ti consente di elencare i contenuti del tuo bucket Cloud Storage. Gli SDK restituiscono sia gli elementi sia i prefissi degli oggetti nell'ambito del riferimento Cloud Storage corrente.
I progetti che utilizzano l'API List richiedono Cloud Storage for Firebase Le regole versione 2. Se hai già un progetto Firebase, segui i passaggi descritti nella guida alle regole di sicurezza.
list()
utilizza l'API List di Google Cloud Storage.
In Cloud Storage per Firebase utilizziamo /
come delimitatore, il che ci consente di
simulare la semantica del file system. Per consentire un attraversamento efficiente di grandi dimensioni,
bucket Cloud Storage gerarchici, l'API List restituisce prefissi e
articoli separatamente. Ad esempio, se carichi un file /images/uid/file1
,
root.child('images').listAll()
restituirà/images/uid
come prefisso.root.child('images/uid').listAll()
restituirà il file come elemento.
L'SDK Cloud Storage for Firebase non restituisce percorsi degli oggetti che contengono due
/
consecutivi o termina con /
. Ad esempio, consideriamo un bucket che
i seguenti oggetti:
correctPrefix/happyItem
wrongPrefix//sadItem
lonelyItem/
Le operazioni di elenco sugli elementi di questo bucket daranno i seguenti risultati:
- L'operazione di elenco nella radice restituisce i riferimenti a
correctPrefix
,wrongPrefix
elonelyItem
comeprefixes
. - L'operazione di elenco in
correctPrefix/
restituisce i riferimenti acorrectPrefix/happyItem
comeitems
. - L'operazione di elenco in
wrongPrefix/
non restituisce riferimenti perchéwrongPrefix//sadItem
contiene due/
consecutivi. - L'operazione di elenco in
lonelyItem/
non restituisce alcun riferimento perché l'oggettolonelyItem/
termina con/
.
Elenca tutti i file
Puoi utilizzare listAll
per recuperare tutti i risultati per una directory.
Questa opzione è particolarmente utile per directory di piccole dimensioni, poiché tutti i risultati sono memorizzati nel buffer in memoria.
Inoltre, l'operazione potrebbe non restituire uno snapshot coerente se gli oggetti vengono aggiunti o rimossi durante il processo.
Per un elenco di grandi dimensioni, utilizza il metodo list()
impaginato, in quanto listAll()
esegue il buffering di tutti
porta in memoria.
L'esempio seguente mostra 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.
}
Eseguire la paginazione dei risultati dell'elenco
L'API list()
pone un limite al numero di risultati che restituisce. list()
fornisce una visualizzazione di pagina coerente ed espone un pageToken che consente il controllo
quando recuperare risultati aggiuntivi.
pageToken codifica il percorso e la versione dell'ultimo elemento restituito nel risultato precedente. In una richiesta successiva utilizzando pageToken, gli elementi che arrivano dopo la visualizzazione di pageToken.
L'esempio seguente mostra l'impaginazione di un risultato:
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);
}
Gestire gli errori
list()
e listAll()
non vanno a buon fine se non hai eseguito l'upgrade
delle Regole di sicurezza alla versione 2. Se la vedi, esegui l'upgrade delle regole di sicurezza
errore:
Listing objects in a bucket is disallowed for rules_version = "1".
Please update storage security rules to rules_version = "2" to use list.
Altri possibili errori potrebbero indicare che l'utente non dispone dell'autorizzazione corretta. Puoi trovare maggiori informazioni sugli errori nella pagina Gestire gli errori.