Как принять файлы с публичного лендинга
Подключите защищённую загрузку файлов к форме заказа без привилегированного токена в браузере.
Что это
Анонимный профиль разрешает посетителю лендинга приложить файл к заказу без входа в Agnostic и без платформенного токена в браузере. Доступ ограничивают точный адрес сайта, CAPTCHA, форматы, размер, число файлов и срок короткой сессии.
Файл сначала загружается в закрытую область. После завершения проверки backend вашего приложения привязывает всю сессию к созданному заказу одним непрозрачным claimToken.
Перед началом
- Создайте логический бакет для файлов заказа.
- Создайте активный профиль анонимной загрузки и сохраните его
publicId. - Добавьте точный origin лендинга, например
https://shop.example.com, без пути
и символа *.
- Настройте разрешённые MIME-типы и лимиты. Правила профиля не могут быть шире
правил бакета.
- Подключите CAPTCHA на форме и подготовьте backend приложения с Runtime token и
правом files.write.
Как настроить профиль в интерфейсе
- В разделе «Файлы» выберите нужное окружение и бакет. Нажмите «Анонимные загрузки» рядом с названием бакета.
- Нажмите «Создать профиль». Если профиль уже активен, используйте «Настроить профиль».
- Укажите точные адреса сайтов, разрешённые MIME-типы и лимиты одного файла, количества файлов и общего объёма сессии. Лимит файла не может превышать ограничение бакета.
- Настройте срок сессии, короткой ссылки и хранения файлов без привязки. Выберите, можно ли принять заказ во время проверки или нужно дождаться полной готовности файлов.
- Сохраните профиль. Его публичный ID, разрешённые сайты и ограничения появятся в списке. «Пример подключения» показывает вызов для этого профиля и пример привязки на backend приложения.
При ошибке сохранения значения остаются в форме. При закрытии изменённой формы выберите «Продолжить редактирование», чтобы сохранить черновик, или «Закрыть без сохранения».
«Отключить профиль» прекращает создание новых анонимных сессий после подтверждения. Уже принятые файлы сохраняются. Отключённый профиль нельзя изменить или включить повторно: создайте новый.
Как сделать
- После успешной CAPTCHA вызовите
POST /api/v1/files/public/anonymous/profiles/{publicId}/sessions и передайте { "captchaToken": "..." }.
- Оставьте полученные
sessionTokenиclaimTokenтолько в памяти страницы.
Не помещайте их в URL, браузерное хранилище, аналитику или логи.
- Для каждого файла вызовите
POST /api/v1/files/public/anonymous/profiles/{publicId}/grants с Bearer sessionToken. Передайте имя, MIME-тип, размер и стабильный idempotencyKey этой попытки загрузки.
- Соберите
multipart/form-data: сначала добавьте все выданныеfieldsбез
изменений, затем один file. Отправьте форму на uploadUrl и ожидайте статус 204.
- Вызовите
POST /api/v1/files/public/anonymous/profiles/{publicId}/uploads/{uploadId}/complete с тем же Bearer sessionToken. Продолжайте только после status: ready. После сетевого сбоя проверьте GET .../uploads/{uploadId}/status: безопасный ответ показывает только processing, ready или rejected.
- Отправьте
claimTokenвместе с формой заказа только в backend вашего
приложения. Не отправляйте отдельный список fileId.
- Сначала сохраните заказ, затем вызовите
agnostic.storage.bucket('order-files').anonymousUploads.claim(...) с постоянным externalRef заказа и стабильным idempotencyKey.
Browser сам добавляет заголовок Origin. Не задавайте его вручную и не добавляйте Content-Type к запросу с FormData.
Безопасные повторы
- Если grant временно не ответил, повторите его с тем же payload и
idempotencyKey.
- Не переиспользуйте уже отправленную POST-форму; получите grant повторно.
- Complete можно повторить с теми же
uploadIdиsessionToken. - Claim после сетевой ошибки повторяют с той же тройкой
claimToken,
externalRef и idempotencyKey.
- Новый файл или новый заказ всегда получает новый ключ.
При истечении session, ошибке целостности или изменении файла начните новую session. При 429 подождите перед повтором; при 503 примените задержку и сохраните исходные ключи повторяемой операции.
Что дальше
После claim backend получает выбранные системой handles файлов. Статус ready подтверждает определённый по содержимому MIME-тип, правила форматов, целостность, malware/archive проверку и безопасное перемещение файла.
Проверьте сценарий с разрешённым и запрещённым origin, истёкшей session, слишком большим файлом, неподдерживаемым или подменённым MIME-типом и сетевыми повторами.