O Cloud Storage para Firebase permite fazer download de arquivos de forma rápida e fácil de um bucket do Cloud Storage fornecido e gerenciado pelo Firebase.
Crie uma referência
Para fazer download de um arquivo, primeiro crie uma referência do Cloud Storage para o arquivo que você deseja baixar.
Você pode criar uma referência anexando caminhos secundários à raiz do bucket do Cloud Storage ou pode criar uma referência a partir de um URL gs://
ou https://
existente que faz referência a um objeto no Cloud Storage.
Web modular API
import { getStorage, ref } from "firebase/storage"; // Create a reference with an initial file path and name const storage = getStorage(); const pathReference = ref(storage, 'images/stars.jpg'); // Create a reference from a Google Cloud Storage URI const gsReference = ref(storage, 'gs://bucket/images/stars.jpg'); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! const httpsReference = ref(storage, 'https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg');
Web namespaced API
// Create a reference with an initial file path and name var storage = firebase.storage(); var pathReference = storage.ref('images/stars.jpg'); // Create a reference from a Google Cloud Storage URI var gsReference = storage.refFromURL('gs://bucket/images/stars.jpg'); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! var httpsReference = storage.refFromURL('https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg');
Baixar dados via URL
Você pode obter o URL de download de um arquivo chamando o método getDownloadURL()
em uma referência do Cloud Storage.
Web modular API
import { getStorage, ref, getDownloadURL } from "firebase/storage"; const storage = getStorage(); getDownloadURL(ref(storage, 'images/stars.jpg')) .then((url) => { // `url` is the download URL for 'images/stars.jpg' // This can be downloaded directly: const xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; xhr.onload = (event) => { const blob = xhr.response; }; xhr.open('GET', url); xhr.send(); // Or inserted into an <img> element const img = document.getElementById('myimg'); img.setAttribute('src', url); }) .catch((error) => { // Handle any errors });
Web namespaced API
storageRef.child('images/stars.jpg').getDownloadURL() .then((url) => { // `url` is the download URL for 'images/stars.jpg' // This can be downloaded directly: var xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; xhr.onload = (event) => { var blob = xhr.response; }; xhr.open('GET', url); xhr.send(); // Or inserted into an <img> element var img = document.getElementById('myimg'); img.setAttribute('src', url); }) .catch((error) => { // Handle any errors });
Baixe dados diretamente do SDK
A partir da versão 9.5 e superior, o SDK fornece estas funções para download direto:
Usando essas funções, você pode ignorar o download de um URL e, em vez disso, retornar dados em seu código. Isso permite um controle de acesso mais refinado por meio das regras de segurança do Firebase .
Configuração do CORS
Para fazer download de dados diretamente no navegador, configure seu bucket do Cloud Storage para acesso entre origens (CORS). Isso pode ser feito com a ferramenta de linha de comando gsutil
, que você pode instalar aqui .
Se você não quiser nenhuma restrição baseada em domínio (o cenário mais comum), copie este JSON para um arquivo chamado cors.json
:
[ { "origin": ["*"], "method": ["GET"], "maxAgeSeconds": 3600 } ]
Execute gsutil cors set cors.json gs://<your-cloud-storage-bucket>
para implantar essas restrições.
Para obter mais informações, consulte a documentação do Google Cloud Storage .
Lidar com erros
Existem vários motivos pelos quais podem ocorrer erros no download, incluindo o arquivo não existir ou o usuário não ter permissão para acessar o arquivo desejado. Mais informações sobre erros podem ser encontradas na seção Tratar erros da documentação.
Exemplo completo
Um exemplo completo de download com tratamento de erros é mostrado abaixo:
Web modular API
import { getStorage, ref, getDownloadURL } from "firebase/storage"; // Create a reference to the file we want to download const storage = getStorage(); const starsRef = ref(storage, 'images/stars.jpg'); // Get the download URL getDownloadURL(starsRef) .then((url) => { // Insert url into an <img> tag to "download" }) .catch((error) => { // A full list of error codes is available at // https://firebase.google.com/docs/storage/web/handle-errors switch (error.code) { case 'storage/object-not-found': // File doesn't exist break; case 'storage/unauthorized': // User doesn't have permission to access the object break; case 'storage/canceled': // User canceled the upload break; // ... case 'storage/unknown': // Unknown error occurred, inspect the server response break; } });
Web namespaced API
// Create a reference to the file we want to download var starsRef = storageRef.child('images/stars.jpg'); // Get the download URL starsRef.getDownloadURL() .then((url) => { // Insert url into an <img> tag to "download" }) .catch((error) => { // A full list of error codes is available at // https://firebase.google.com/docs/storage/web/handle-errors switch (error.code) { case 'storage/object-not-found': // File doesn't exist break; case 'storage/unauthorized': // User doesn't have permission to access the object break; case 'storage/canceled': // User canceled the upload break; // ... case 'storage/unknown': // Unknown error occurred, inspect the server response break; } });
Você também pode receber ou atualizar metadados de arquivos armazenados no Cloud Storage.