Firebase
Как загрузить файлы из облачных функций Firebase в облачное хранилище Firebase
Напишите функцию firebase для загрузки файла с удаленного URL-адреса и загрузки его в хранилище firebase.
Недавно я работал над модулем в нашем приложении, где мне нужно написать функцию JavaScript, которая будет работать в нашей облачной функции Firebase. Позвольте мне показать вам, на что нужно обратить внимание:
Пример использования:
- Пользователь создаст запись данных в базе данных. В данном случае это коллекция в Firebase Cloud Firestore.
- Документ состоит из URL удаленного изображения, идентификатора и идентификатора пользователя.
- Когда данные создаются, запускается облачная функция Firebase.
Задачи Firebase Cloud Function:
- Загрузите изображение с другого сайта
- Загрузите изображение в Firebase Cloud Firestore Storage
- Обновите документ в коллекции 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 - это двухэтапный процесс.
- Загрузите файл и сохраните его в каталоге
temp
. - Загрузите файл из каталога
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 и обновляет коллекцию, добавляя новое поле. .
👨🏼💻 Если вам понравился этот пост, вы можете оставить до пятидесяти 👏👏👏 аплодисментов. Если у вас есть вопросы или мнения, дайте мне знать в комментариях.