Seus arquivos são armazenados em um bucket do Cloud Storage. Os arquivo nesse bucket são apresentados em uma estrutura hierárquica, exatamente como o sistema de arquivos no disco rígido local ou como os dados no Firebase Realtime Database. Quando você cria uma referência a um arquivo, seu app ganha acesso a ele. Essas referências podem ser usadas para fazer upload ou download de dados, receber ou atualizar metadados ou excluir o arquivo. Uma referência pode apontar para um arquivo específico ou para um nó de nível superior na hierarquia.
Se você já usou o Firebase Realtime Database, esses caminhos devem parecer familiares. No entanto, os dados dos arquivos são armazenados no Cloud Storage, não no Realtime Database.
Criar uma referência
Para fazer upload, download e excluir arquivos ou receber e atualizar metadados, é necessário criar uma referência ao arquivo com que você quer trabalhar. Podemos pensar nas referências como ponteiros para um arquivo na nuvem. As referências são leves, para que você possa criar tantas quantas precisar, e também são reutilizáveis para várias operações.
Para criar uma referência, receba uma instância do serviço de armazenamento usando
getStorage()
e, em seguida, chame ref()
com o serviço como um argumento.
Essa referência aponta para a raiz do bucket do Cloud Storage.
Web
import { getStorage, ref } from "firebase/storage"; // Get a reference to the storage service, which is used to create references in your storage bucket const storage = getStorage(); // Create a storage reference from our storage service const storageRef = ref(storage);
Web
// Get a reference to the storage service, which is used to create references in your storage bucket var storage = firebase.storage(); // Create a storage reference from our storage service var storageRef = storage.ref();
Para criar uma referência a um local inferior da árvore,
como 'images/space.jpg'
, transmita esse caminho como um segundo argumento ao
chamar ref()
.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); // Create a child reference const imagesRef = ref(storage, 'images'); // imagesRef now points to 'images' // Child references can also take paths delimited by '/' const spaceRef = ref(storage, 'images/space.jpg'); // spaceRef now points to "images/space.jpg" // imagesRef still points to "images"
Web
// Create a child reference var imagesRef = storageRef.child('images'); // imagesRef now points to 'images' // Child references can also take paths delimited by '/' var spaceRef = storageRef.child('images/space.jpg'); // spaceRef now points to "images/space.jpg" // imagesRef still points to "images"
Navegar com referências
Também é possível usar as propriedades parent
e root
para navegar até uma posição superior da hierarquia de arquivos. O método parent
navega até um nível acima, enquanto que root
navega até o topo.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // Parent allows us to move to the parent of a reference const imagesRef = spaceRef.parent; // imagesRef now points to 'images' // Root allows us to move all the way back to the top of our bucket const rootRef = spaceRef.root; // rootRef now points to the root
Web
// Parent allows us to move to the parent of a reference var imagesRef = spaceRef.parent; // imagesRef now points to 'images' // Root allows us to move all the way back to the top of our bucket var rootRef = spaceRef.root; // rootRef now points to the root
Como cada um desses métodos retorna uma referência, child()
, parent
e root
podem ser chamados um sobre o outro várias vezes. A exceção é o parent
do root
, que é null
.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // References can be chained together multiple times const earthRef = ref(spaceRef.parent, 'earth.jpg'); // earthRef points to 'images/earth.jpg' // nullRef is null, since the parent of root is null const nullRef = spaceRef.root.parent;
Web
// References can be chained together multiple times var earthRef = spaceRef.parent.child('earth.jpg'); // earthRef points to 'images/earth.jpg' // nullRef is null, since the parent of root is null var nullRef = spaceRef.root.parent;
Propriedades de referência
Você pode inspecionar referências para entender melhor os arquivos aos quais elas
apontam usando as propriedades fullPath
, name
e bucket
. Essas propriedades recebem o caminho completo e o nome do arquivo, além do bucket em que ele está armazenado.
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // 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 where files are stored spaceRef.bucket;
Web
// 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 where files are stored spaceRef.bucket;
Limitações das referências
Os caminhos e os nomes das referências podem conter qualquer sequência de caracteres válidos Unicode, mas com algumas restrições como:
- O tamanho total de
reference.fullPath
precisa estar entre 1 e 1.024 bytes quando codificado em UTF-8. - Nenhum caractere de retorno de carro ou nova linha.
- Evite usar
#
,[
,]
,*
ou?
, já que não funcionam bem com outras ferramentas, como o Firebase Realtime Database ou a gsutil.
Exemplo completo
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); // Points to the root reference const storageRef = ref(storage); // Points to 'images' const imagesRef = ref(storageRef, 'images'); // Points to 'images/space.jpg' // Note that you can use variables to create child values const fileName = 'space.jpg'; const spaceRef = ref(imagesRef, fileName); // File path is 'images/space.jpg' const path = spaceRef.fullPath; // File name is 'space.jpg' const name = spaceRef.name; // Points to 'images' const imagesRefAgain = spaceRef.parent;
Web
// Points to the root reference var storageRef = firebase.storage().ref(); // Points to 'images' var imagesRef = storageRef.child('images'); // Points to 'images/space.jpg' // Note that you can use variables to create child values var fileName = 'space.jpg'; var spaceRef = imagesRef.child(fileName); // File path is 'images/space.jpg' var path = spaceRef.fullPath; // File name is 'space.jpg' var name = spaceRef.name; // Points to 'images' var imagesRef = spaceRef.parent;
A seguir, veja como fazer upload de arquivos para o Cloud Storage.