Firebase

Как загрузить файлы из облачных функций Firebase в облачное хранилище Firebase

Напишите функцию firebase для загрузки файла с удаленного URL-адреса и загрузки его в хранилище firebase.

Недавно я работал над модулем в нашем приложении, где мне нужно написать функцию JavaScript, которая будет работать в нашей облачной функции Firebase. Позвольте мне показать вам, на что нужно обратить внимание:

Пример использования:

  1. Пользователь создаст запись данных в базе данных. В данном случае это коллекция в Firebase Cloud Firestore.
  2. Документ состоит из URL удаленного изображения, идентификатора и идентификатора пользователя.
  3. Когда данные создаются, запускается облачная функция Firebase.

Задачи Firebase Cloud Function:

  1. Загрузите изображение с другого сайта
  2. Загрузите изображение в Firebase Cloud Firestore Storage
  3. Обновите документ в коллекции Firebase Cloud Firestore

Я написал облачную функцию JavaScript, которая решила мою проблему. И позвольте мне поделиться с вами, как я это решил.

Я предполагаю, что вы уже знаете, как работают Firebase Cloud Firestore, Firebase Cloud Storage и Firebase Cloud Function.

Шаг 1. Установите некоторые пакеты Node.js

Чтобы написать облачную функцию JavaScript, я использовал следующие внешние библиотеки JavaScript.

npm install axios
npm install got
npm install file-type

Шаг 2. Импортируйте библиотеки

Я создал файл JavaScript, который развертываю в Firebase Cloud Function. Для простоты напишем код в index.js файле по умолчанию.

Шаг 2. Инициализируйте приложение

Шаг 3: напишите триггерную функцию

Нам нужно создать и экспортировать функцию, которую Firebase зарегистрирует автоматически при развертывании в Firebase Cloud Function. Эта функция будет запущена, когда новый документ будет вставлен в наш collection.. Итак, давайте напишем downloadPhotoOnCreate функцию.

Итак, здесь мы определяем константу collection и передаем имя коллекции. Но в нашем проекте все по-другому.

data - это документ, который вставлен в коллекцию.

mediaUrl - это URL-адрес изображения другого хостинга.

storageMediaId будет использоваться в качестве имени файла при загрузке файла в хранилище Firebase.

Позже мы напишем больше кода для этой функции.

Шаг 4: напишите функцию загрузчика изображений

Загрузка файла изображения с удаленного сервера и загрузка его в хранилище Firebase через функцию Firebase - это двухэтапный процесс.

  1. Загрузите файл и сохраните его в каталоге temp.
  2. Загрузите файл из каталога temp в хранилище Firebase.

Мы напишем 2 функции для загрузки файла изображения.

4.1 Функция удаленного обнаружения файлов

Чтобы узнать тип удаленного файла, давайте напишем функцию retrieveStreamFileType

Используя библиотеки got и FileType, мы можем легко определить тип удаленного файла. И эта функция вернет тип файла. Чтобы узнать больше об этой библиотеке, отметьте file-type npm.

4.2 Функция удаленной загрузки изображений

Теперь давайте напишем функцию удаленной загрузки изображений.

Эта функция получит fileUrl и fileName. Используя функцию retrieveStreamFileType, он сначала определит тип удаленного файла. Чтобы с помощью расширения можно было сгенерировать имя файла. Например, filename.jpg.

Затем он сохраняет файл в каталоге temp. Используя встроенную библиотеку Node.js, мы легко можем это сделать.

И, если все сделано успешно, обещание выполняется. Line 36-39 вы видите, он вернет filePath и fileName.

Шаг 5. Напишите функцию загрузки хранилища Firebase

Теперь давайте напишем функцию загрузки изображений. В нашем хранилище у нас есть каталог images/, в который мы хотим загрузить загруженный файл.

Таким образом, эта функция получит путь к локальному временному загруженному файлу, например /tmp/filename.jpg, и загрузит файл в каталог images нашего хранилища.

Если вам не нужна никакая папка в хранилище Firebase, просто сделайте imageBucket пустым, как const imageBucket = "";, и все заработает.

Шаг 6. Обновите функцию downloadPhotoOnCreate

Итак, давайте обновим функцию downloadPhotoOnCreate.

Все это асинхронные функции. И с помощью await скрипт ждет, пока шаг не завершит свою задачу. На шаге 3, Line 18-21 вы видите, мы обновляем collection, добавляя storageMediaId, когда все предыдущие задачи завершены, чтобы создать запись с идентификатором загруженного файла хранилища.

Окончательный сценарий:

Заключение

Итак, мы развернули эту функцию в нашей облачной функции Firebase, и теперь, когда пользователь создает запись в нашем облачном хранилище Firebase, эта downloadPhotoOnCreate функция запускается, загружает фотографию, загружает ее в хранилище Firebase и обновляет коллекцию, добавляя новое поле. .

👨🏼‍💻 Если вам понравился этот пост, вы можете оставить до пятидесяти 👏👏👏 аплодисментов. Если у вас есть вопросы или мнения, дайте мне знать в комментариях.