Как ограничить размер загрузки корзины в Backblaze B2 (S3-СОВМЕСТИМЫЙ API)?

Я реализую в нашем приложении функционал, при котором пользователи покупают подписку и создают свое рабочее пространство. Каждый план подписки имеет разные ограничения на хранилище (например, 5 ГБ для небольшого плана). Мы используем Backblaze B2 для хранения и в настоящее время создаем отдельный бакет при каждом создании организации, и это работает нормально.

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

Я просмотрел документацию Backblaze и поискал в Интернете любые существующие решения или обходные пути, но не нашел способа напрямую ограничить размер хранилища корзины. Я ожидал найти метод или API, который позволит устанавливать квоты хранилища или получать общий размер сегмента для программного обеспечения этих ограничений.

Кроме того, я использую @aws-sdk/client-s3 для управления хранилищем, совместимым с S3.

Кто-нибудь знает, как реализовать ограничения хранилища в корзинах Backblaze B2 в зависимости от плана подписки пользователя? Будем очень признательны за любые советы или обходные пути. Спасибо!

Amazon S3 не предлагает эту функциональность, поэтому она должна быть либо функцией Backblaze, либо чем-то, чем управляет ваш код.

John Rotenstein 02.07.2024 05:58

Ты прав. Поэтому я обрабатываю это в своем коде, суммируя размеры файлов при загрузке и сохраняя эту сумму в базе данных. Я также проверяю, превышает ли общая сумма лимит размера плана. Спасибо за помощь, чувак.

Mohammad Riyan 02.07.2024 12:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вам придется самостоятельно создать маршрут с помощью multer, чтобы принять файл, затем в своем маршруте вы можете проверить тип/размер файла и т. д. и загрузить его оттуда

Ответ принят как подходящий

Обеспечение соблюдения ограничений хранилища в корзинах Backblaze B2 напрямую не поддерживается. Вам придется самостоятельно отслеживать использование хранилища в своем приложении, но я могу вам помочь:

Отслеживание использования: ведите учет использования хранилища для каждого рабочего пространства пользователя в базе данных вашего приложения.

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

Уведомления. Предоставляйте пользователям обратную связь, когда они достигают или превышают лимиты хранилища, используя сообщения или уведомления в вашем приложении.

Периодические проверки: реализуйте проверки для периодической сверки и очистки использования хранилища.

Если у вас есть какие-либо конкретные вопросы или вам нужна дополнительная информация о реализации этого, дайте мне знать!

Теперь я каждый раз, когда пользователь загружает файлы, суммирую размеры файлов и сохраняю итоговую сумму в базе данных. Я также проверяю, превышает ли эта сумма предел размера плана. Спасибо за помощь!

Mohammad Riyan 02.07.2024 12:37

Вы можете достичь своей цели, используя Партнерский API Backblaze. Вместо того, чтобы создавать корзину для каждого клиента в одной учетной записи Backblaze, вы можете использовать Partner API для создания учетных записей Backblaze под вашим контролем и организованных в группы для ваших клиентов.

Учетная запись участника группы не позволяет клиенту войти в систему; вместо этого вы, как администратор группы, можете создать ключ приложения для члена группы и выполнять операции в контексте этой учетной записи.

Вы также можете установить ограничения на объем хранилища, пропускную способность загрузки и т. д. для каждой учетной записи и получить доступ к ежедневным отчетам с подробным описанием использования каждым из членов вашей группы.

В документации по партнерскому API перечислены шаги для начала работы. В частности, обратите внимание, что вам нужно будет связаться с отделом продаж Backblaze, чтобы они предоставили вам доступ к API.

Другие вопросы по теме

Похожие вопросы

Пакет Whatsapp-web.js не работает при сканировании QR-кода
Невозможно прочитать свойства null (чтение «коллекции»), эта ошибка возникает при отправке формы. Невозможно сохранить данные в базе данных
Запрос на вставку MySQL выполнен успешно, но не вставляется в таблицу базы данных
Обновление документа Firestore несколько раз с помощью функции триггера события перезаписывает или прекращает обновление после нескольких триггеров
Ошибка при развертывании определенной облачной функции Firebase. Невозможно загрузить предоставленный модуль
Как зашифровать расшифровку с помощью криптомодуля Node.js?
Откройте соединение TCP/IP через сокет с помощью принтера этикеток
Как подключить Sequelize к базе данных Google Cloud SQL, когда я развернул свой внутренний API Node.JS?
Nodejs -> ldapjs... почему возвращаемое значение не определено, а реальное значение client.bind занимает второе место?
Dash.js извлекает файлы .m4s при настройке video.currentTime и приводит к ошибкам. Ошибки при настройке video.currentTime в Dash.js