5 эффективных способов получить URL-адрес загрузки для функций Firebase

Firebase Functions – это мощная бессерверная платформа, позволяющая запускать серверный код в облаке. Одним из распространенных вариантов использования является создание и предоставление URL-адресов для загрузки файлов, хранящихся в облачном хранилище. В этой статье блога мы рассмотрим несколько методов получения URL-адреса загрузки для функций Firebase, а также несколько практических примеров кода. Давайте погрузимся!

Метод 1. Использование Firebase Admin SDK
Firebase Admin SDK предоставляет набор мощных инструментов для управления вашим проектом Firebase. Чтобы получить URL-адрес загрузки файла, хранящегося в Cloud Storage, вы можете использовать следующий фрагмент кода:

const admin = require('firebase-admin');
admin.initializeApp();
async function getDownloadUrl(bucketName, fileName) {
  const storage = admin.storage();
  const bucket = storage.bucket(bucketName);
  const file = bucket.file(fileName);
  const url = await file.getSignedUrl({ action: 'read', expires: '03-01-2025' });
  return url[0];
}
const downloadUrl = await getDownloadUrl('your-bucket-name', 'your-file-name');
console.log(downloadUrl);

Метод 2: использование Firebase Client SDK
Firebase Client SDK предоставляет удобный способ взаимодействия со службами Firebase из клиентского кода. Чтобы получить URL-адрес загрузки с помощью Firebase Client SDK, вы можете использовать следующий код:

const storageRef = firebase.storage().ref();
const fileRef = storageRef.child('your-file-name');
fileRef.getDownloadURL().then((url) => {
  console.log(url);
}).catch((error) => {
  console.log(error);
});

Метод 3. Использование REST API Cloud Storage
Если вы предпочитаете более прямой подход, вы можете использовать REST API Cloud Storage для получения URL-адреса загрузки. Вот пример использования библиотеки axiosв Node.js:

const axios = require('axios');
async function getDownloadUrl(bucketName, fileName) {
  const response = await axios.get(`https://storage.googleapis.com/storage/v1/b/${bucketName}/o/${encodeURIComponent(fileName)}?alt=media`);
  return response.data.mediaLink;
}
const downloadUrl = await getDownloadUrl('your-bucket-name', 'your-file-name');
console.log(downloadUrl);

Метод 4: облачные функции, запускаемые при загрузке файла.
Другой способ создания URL-адреса загрузки — использование облачной функции, запускаемой событием загрузки файла. Вот пример использования Firebase Functions SDK:

const functions = require('firebase-functions');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();
exports.generateDownloadUrl = functions.storage.object().onFinalize(async (object) => {
  const bucket = storage.bucket(object.bucket);
  const file = bucket.file(object.name);
  const url = await file.getSignedUrl({ action: 'read', expires: '03-01-2025' });
  console.log(url[0]);
});

Метод 5: перезапись хостинга Firebase
Если вы используете хостинг Firebase, вы можете использовать перезапись URL-адресов для создания удобных URL-адресов для загрузки. Вот пример того, как вы можете настроить файл firebase.json:

{
  "hosting": {
    "rewrites": [
      {
        "source": "/downloads/",
        "function": "generateDownloadUrl"
      }
    ]
  }
}

В этом примере любой запрос к /downloads/будет перенаправлен в облачную функцию generateDownloadUrl, которая затем сможет сгенерировать и вернуть соответствующий URL-адрес загрузки.

В этой статье мы рассмотрели пять различных способов получения URL-адреса загрузки для функций Firebase. Предпочитаете ли вы использовать Firebase Admin SDK, Firebase Client SDK, REST API облачного хранилища, облачные функции или перезапись хостинга Firebase, у вас есть ряд вариантов на выбор в зависимости от ваших конкретных требований. Поэкспериментируйте с этими методами и выберите тот, который лучше всего подходит для вашего случая использования. Приятного кодирования!