Перейти к основному содержанию
Файл уходит не в API, а прямо в объектное хранилище по временным ссылкам. API выдаёт ссылки и принимает подтверждение.
Ваш сервис
API AiGenda
Хранилище
1
POST /audio/
title, size, content_type
2
id, url[]
ссылки на части
3
PUT часть
по ссылке url[i]
4
ETag
в заголовке ответа
5
POST /complete_upload/
PartNumber и ETag
6
GET /info/
до is_uploaded: true
1
Ваш сервис → API AiGenda
POST /audio/
title, size, content_type
2
API AiGenda → Ваш сервис
id, url[]
ссылки на части
3
Ваш сервис → Хранилище
PUT часть
по ссылке url[i]
4
Хранилище → Ваш сервис
ETag
в заголовке ответа
5
Ваш сервис → API AiGenda
POST /complete_upload/
PartNumber и ETag
6
Ваш сервис → API AiGenda
GET /info/
до is_uploaded: true

Шаги

1

Создайте запись

Ответ 201
url всегда массив: по ссылке на каждую часть файла, примерно одна часть на 1 ГБ.
2

Загрузите части

Разделите файл на столько частей, сколько пришло ссылок:
  • размер части: ceil(size / len(url)) байт, последняя часть короче;
  • часть с номером i (с единицы) уходит на ссылку url[i-1];
  • метод PUT, тело запроса: байты части, без JSON и multipart-формы;
  • из ответа хранилища сохраните заголовок ETag вместе с двойными кавычками: "9b2cf535f27731c974343645a3985328".
Ссылки живут 5 часов с момента создания записи. Хранилище разрешает запросы из браузера (CORS открыт, ETag читается), так что грузить можно и с фронтенда.
3

Завершите загрузку

Передайте номера частей и их ETag в том порядке, в котором грузили.
Ответ: 200 с пустым телом.
4

Дождитесь подтверждения

Опрашивайте info/ раз в 2 секунды, пока не придёт is_uploaded: true. Обычно это меньше секунды. После этого запускайте обработку.

Готовый код

Если что-то пошло не так

Последнее изменение 17 октября 2026 г.