Облачные функции Firebase onFinalize триггер с предопределенным сегментом? - PullRequest
2 голосов
/ 30 января 2020

Можно ли написать облачную функцию firebase, которая срабатывает при создании новой fila в хранилище firebase - onFinalize (но мы не знаем точный сегмент заранее)?

Внутри моего хранилища firebase a У меня есть папка «load», и внутри у меня есть папки с именами с идентификатором загрузки, такими как:

  • / load / -Lw1UySdunYyFMrrV6tl
  • / load / -LwisA5hkNl_uxw3k36f
  • / load / -LwkPUm-q7wNv-wZ49Un

https://ibb.co/NnQkTyC вот скриншот хранилища

Я хочу запустить облачную функцию, когда внутри одного файла был создан новый из этих папок. Я не знаю в andvance, где файл будет создан. Я не знаю, возможно ли это вообще. Вот почему мне нужен совет.

Моя главная цель - объединить 2 файла PDF в один в облачных функциях. В моем приложении (TMS, написанном с vuejs) в веб-интерфейсе я создаю подтверждениеOrder.pdf с помощью html2canvas / jsPDF, а затем сохраняю его в storage /load / $ {loadID}. И позже пользователь может вручную загрузить POD.pdf в том же контейнере. Когда это происходит, я хочу, чтобы моя облачная функция объединила эти два файла PDF в один новый файл (в том же контейнере). Но опять же я не знаю ведро заранее.

Вот как я загружаю PDF-файлы в веб-интерфейс:

 async uploadConfPDF({ commit }, payload) {
      const PDF = payload.PDF;
      const loadID = payload.loadID;
      const fileName = payload.fileName;

      const fileData = await firebase
        .storage()
        .ref(`loads/${loadID}/${fileName}.pdf`)
        .put(PDF);

      const confOrderURL = await fileData.ref.getDownloadURL();

      return confOrderURL;
    }, 

Любая помощь очень важна. Извините, если мое объяснение может показаться недостаточно ясным. Английский sh не мой родной язык.

1 Ответ

2 голосов
/ 30 января 2020

РЕДАКТИРОВАТЬ В СООТВЕТСТВИИ С ВАШИМ ВОПРОСОМ ПЕРЕРАБОТКА

Исходя из вашего кода и экрана печати консоли Cloud Storage, вы работаете в корзине проекта по умолчанию, расположение которой URL-адрес gs://alex-logistics.appspot.com.

Как мы видим на экране печати консоли Cloud Storage, файлы в вашем хранилище представлены в иерархической структуре , точно так же, как файловая система на вашем локальном жестком диске. Однако это просто способ представления файлов: в корзине нет подлинных папок / каталогов, консоль Cloud Storage просто использует другую часть путей к файлам для «имитации» структуры папок.


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

Ответ:

В облачной функции, которая запускается при добавлении файла в корзину по умолчанию, вы можно получить путь к файлу следующим образом:

exports.yourCloudFunction = functions.storage.object().onFinalize(async (object) => {

    const filePath = object.name; // File path in the bucket.

    //...

});

Поскольку мы используем обработчик событий onFinalize, вы получите путь к этому новому файлу с помощью name свойство object объекта типа ObjectMetadata.

Затем вы можете использовать некоторые методы String, чтобы, например, извлечь из этого пути ${loadID}, на который вы ссылаетесь в своем вопросе.

...