#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:
Насколько я знаю, для облачного хранилища нет функции пакетного удаления. Это означает, что вам придется:
- Выполните два отдельных вызова удаления.
- Убедитесь, что любой код, загружающий изображения, достаточно надежен, чтобы справиться с отсутствием только одного из этих изображений. Обычно вы можете уменьшить влияние этого, удалив изображения в определенном порядке. Например: если пользователь переходит к полноразмерному изображению из миниатюры, то сначала удаление миниатюры гарантирует, что приложение будет продолжать работать, даже если полноразмерное изображение останется позади.
- Запустите периодический процесс для удаления потерянного файла.