Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Crea un riferimento di Cloud Storage su Flutter

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

I tuoi file sono archiviati in un bucket di Cloud Storage . I file in questo bucket sono presentati in una struttura gerarchica, proprio come il file system sul disco rigido locale o i dati nel database Firebase Realtime. Creando un riferimento a un file, la tua app vi accede. Questi riferimenti possono quindi essere utilizzati per caricare o scaricare dati, ottenere o aggiornare metadati o eliminare il file. Un riferimento può puntare a un file specifico oa un nodo di livello superiore nella gerarchia.

Se hai utilizzato Firebase Realtime Database , questi percorsi dovrebbero sembrarti molto familiari. Tuttavia, i dati dei tuoi file sono archiviati in Cloud Storage, non nel database in tempo reale.

Crea un riferimento

Crea un riferimento per caricare, scaricare o eliminare un file o per ottenere o aggiornare i suoi metadati. Un riferimento può essere pensato come un puntatore a un file nel cloud. I riferimenti sono leggeri, quindi puoi crearne quanti ne hai bisogno. Sono anche riutilizzabili per più operazioni.

Crea un riferimento utilizzando l'istanza singleton FirebaseStorage e chiamando il relativo metodo ref() .

final storageRef = FirebaseStorage.instance.ref();

Successivamente, puoi creare un riferimento a una posizione più in basso nell'albero, ad esempio "images/space.jpg" utilizzando il metodo child() su un riferimento esistente.

// Create a child reference
// imagesRef now points to "images"
final imagesRef = storageRef.child("images");

// Child references can also take paths
// spaceRef now points to "images/space.jpg
// imagesRef still points to "images"
final spaceRef = storageRef.child("images/space.jpg");

Puoi anche utilizzare le proprietà parent e root per navigare verso l'alto nella nostra gerarchia di file. parent sale di un livello, mentre root naviga fino in cima.

// parent allows us to move our reference to a parent node
// imagesRef2 now points to 'images'
final imagesRef2 = spaceRef.parent;

// root allows us to move all the way back to the top of our bucket
// rootRef now points to the root
final rootRef = spaceRef.root;

child() , parent e root possono essere concatenati insieme più volte, poiché ciascuno è un riferimento. Ma l'accesso a root.parent risulta null .

// References can be chained together multiple times
// earthRef points to 'images/earth.jpg'
final earthRef = spaceRef.parent?.child("earth.jpg");

// nullRef is null, since the parent of root is null
final nullRef = spaceRef.root.parent;

Proprietà di riferimento

Puoi esaminare i riferimenti per comprendere meglio i file a cui puntano utilizzando le fullPath , name e bucket . Queste proprietà ottengono il percorso completo, il nome e il bucket del file.

// Reference's path is: "images/space.jpg"
// This is analogous to a file path on disk
spaceRef.fullPath;

// Reference's name is the last segment of the full path: "space.jpg"
// This is analogous to the file name
spaceRef.name;

// Reference's bucket is the name of the storage bucket that the files are stored in
spaceRef.bucket;

Limitazioni sui riferimenti

I percorsi e i nomi di riferimento possono contenere qualsiasi sequenza di caratteri Unicode validi, ma vengono imposte alcune restrizioni, tra cui:

  1. La lunghezza totale di reference.fullPath deve essere compresa tra 1 e 1024 byte quando è codificato UTF-8.
  2. Nessun carattere di ritorno a capo o di avanzamento riga.
  3. Evitare di utilizzare # , [ , ] , * o ? , poiché questi non funzionano bene con altri strumenti come Firebase Realtime Database o gsutil .

Esempio completo

// Points to the root reference
final storageRef = FirebaseStorage.instance.ref();

// Points to "images"
Reference? imagesRef = storageRef.child("images");

// Points to "images/space.jpg"
// Note that you can use variables to create child values
final fileName = "space.jpg";
final spaceRef = imagesRef.child(fileName);

// File path is "images/space.jpg"
final path = spaceRef.fullPath;

// File name is "space.jpg"
final name = spaceRef.name;

// Points to "images"
imagesRef = spaceRef.parent;

Successivamente, impariamo come caricare file su Cloud Storage.