Cloud Storage for Firebase позволяет быстро и легко загружать файлы из хранилища Cloud Storage предоставляемого и управляемого Firebase.
Создать ссылку
Для загрузки файла сначала создайте ссылку на файл в Cloud Storage .
Вы можете создать ссылку, добавив дочерние пути к корню вашего сегмента Cloud Storage , или вы можете создать ссылку на основе существующего URL-адреса gs:// или https:// ссылающегося на объект в Cloud Storage .
Web
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
// 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');
Скачать данные по URL
Получить URL-адрес для загрузки файла можно, вызвав метод getDownloadURL() в ссылке на Cloud Storage .
Web
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
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 });
Загрузка данных непосредственно из SDK.
Начиная с версии 9.5 и выше, SDK предоставляет следующие функции для прямой загрузки:
Используя эти функции, вы можете обойтись без загрузки данных по URL-адресу и вместо этого получать данные непосредственно в коде. Это позволяет осуществлять более точный контроль доступа с помощью Firebase Security Rules .
Конфигурация CORS
Для загрузки данных непосредственно в браузер необходимо настроить хранилище Cloud Storage для доступа из других источников (CORS). Это можно сделать с помощью инструмента командной строки gsutil , который можно установить отсюда .
Если вы не хотите никаких ограничений, связанных с доменом (наиболее распространенный сценарий), скопируйте этот JSON в файл с именем cors.json :
[
{
"origin": ["*"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
] Для развертывания этих ограничений выполните команду gsutil cors set cors.json gs://<your-cloud-storage-bucket> .
Для получения более подробной информации обратитесь к документации Google Cloud Storage .
Обработка ошибок
При загрузке могут возникать ошибки по ряду причин, включая отсутствие файла или отсутствие у пользователя прав доступа к нужному файлу. Более подробную информацию об ошибках можно найти в разделе «Обработка ошибок» документации.
Полный пример
Полный пример загрузки с обработкой ошибок показан ниже:
Web
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
// 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; } });
Вы также можете получать или обновлять метаданные для файлов, хранящихся в Cloud Storage .