Как избежать выполнения функции firebase для папок в событиях облачного хранилища - PullRequest
0 голосов
/ 01 июля 2018

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

Таким образом, для каждого актива, который я загружаю в папку, assets-temp/ затем перемещается и переименовывается функциями в assets/{unique-id}/original{extension}.

пример: assets-temp/my-awesome-image.jpg должно стать assets/489023840984/original.jpg.

примечание: я также отслеживаю файлы с их исходным именем в БД и в метаданных файла оригинала.

Проблема : функция запускается и выполняет то, что я хочу, но она также добавляет папку с именем assets/{uuid}/original/, в которой ничего нет ...

Функция:

exports.process_new_assets = functions.storage.object().onFinalize(async (object) => {
  // Run this function only for files uploaded to the "assets-temp/" folder.
  if (!object.name.startsWith('assets-temp/')) return null;

  const file = bucket.file(object.name);
  const fileExt = path.extname(object.name);
  const destination = bucket.file(`assets/${id}/original${fileExt}`);
  const metadata = {
    id,
    name: object.name.split('/').pop()
  };

  // Move the file to the new location.
  return file.move(destination, {metadata});
});

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

В соответствии с документацией папок в облачном хранилище не существует, однако их можно эмулировать, как это можно сделать с помощью графического интерфейса консоли. При создании папок на самом деле происходит создание пустого объекта (ноль байтов пространства), но его имя заканчивается косой чертой, также имена папок могут заканчиваться _$folder$, но, насколько я понимаю, так работали в старых версии, так что для более новых ковшей достаточно косой черты.

0 голосов
/ 01 июля 2018

Я предполагаю , что это может произойти, если операция загрузки исходного изображения инициирует два отдельных события: одно, которое создает каталог assets-temp, и другое, которое создает файл assets-temp / my-awesome. -image.jpg.

Если я угадаю правильно, первая операция вызовет вашу функцию с объектом каталога (с именем "assets-temp/"). Это соответствует вашему первому if, поэтому код продолжит работу и сделает

destination = bucket.file('assets/${id}/original') // fileExt being empty

и затем вызовите file.move - это создаст каталог assets/id/original/.

Просто улучшите ваше «если», чтобы исключить файл с именем «assets-temp /".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...