Ваш сервис
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".
ETag читается), так что грузить можно и с фронтенда.3
Завершите загрузку
Передайте номера частей и их Ответ:
ETag в том порядке, в котором грузили.200 с пустым телом.4
Дождитесь подтверждения
Опрашивайте
info/ раз в 2 секунды, пока не придёт is_uploaded: true. Обычно это меньше секунды. После этого запускайте обработку.