Как удалить файлы из облачного хранилища Google в пакетном режиме? (Node.js )

#node.js #firebase #google-cloud-platform #google-cloud-storage #firebase-storage

#node.js #firebase #google-облачная платформа #google-облачное хранилище #firebase-хранилище

Вопрос:

Я пытаюсь удалить 2 файла, которые зависят сами от себя, из хранилища gc в «одно и то же время», в пакетном режиме. До сих пор я делал что-то вроде этого:

 exports.deleteImageFromBucket = async function (uri, bucket) {
  const imagePath = getStoragePathFromUrl(uri);

  try {
    await bucket.file(imagePath).delete();
  } catch (err) {
    console.error(`Error deleting image ${uri} from storage`);
    throw err;
  }
}; 
  

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

Есть идеи?

Комментарии:

1. Что вас беспокоит в плохом пользовательском интерфейсе?

2. Здесь вы удаляете только одно изображение? В чем проблема, чтобы вызвать 2 раза эту функцию на 2 разных URI (изображение и эскиз)?

3. @DougStevensone на стороне клиента у меня есть компоненты images, которые сначала загружают эскиз, а затем изображение штаб-квартиры. В моем алгоритме я сначала удаляю эти два изображения, а затем удаляю связанные документы в БД. Если при удалении одного из двух изображений произойдет сбой, то мой код не коснется базы данных и выдаст клиенту сообщение об ошибке, в котором будет сказано что-то вроде «Повторите попытку позже», просто чтобы убедиться, что хранилище полностью переработано (если пользователь попробует это сделать позже, то два удаления могут пойтиотлично, и в хранилище не будет никакого короля ненужного мусора)…

4. … но без пакетной операции, если миниатюра не удалена, но изображение штаб-квартиры да, тогда пользователь увидит миниатюру на изображении и не сможет получить изображение полного качества (это изображение с прогрессивной загрузкой)

Ответ №1:

Насколько я знаю, для облачного хранилища нет функции пакетного удаления. Это означает, что вам придется:

  1. Выполните два отдельных вызова удаления.
  2. Убедитесь, что любой код, загружающий изображения, достаточно надежен, чтобы справиться с отсутствием только одного из этих изображений. Обычно вы можете уменьшить влияние этого, удалив изображения в определенном порядке. Например: если пользователь переходит к полноразмерному изображению из миниатюры, то сначала удаление миниатюры гарантирует, что приложение будет продолжать работать, даже если полноразмерное изображение останется позади.
  3. Запустите периодический процесс для удаления потерянного файла.