Взрослые разработчики используют заголовки. Никто не ограничивает вас в использовании заголовка Content-Range в запросе.
Прошу прощения, позволю себе использовать синтаксис httpie.
POST "/upload/"
Content-Type:[MEDIA_TYPE]
Content-MD5:[BASE64_MD5_FILE]
Content-Range: bytes [FROM_BYTES]-[TO_BYTES]/[FILE_SIZE]
file@file.ext
Один эндпойнт. Без бойлерплейта из трех разных запросов.
bytes 0-? : создаёт файл, рекомендовал бы создавать с именем md5;
bytes ? -? : запись в файл
bytes ? - total_size : запись в файл, проверка контрольной суммы, переименование.
Размер чанка = ширина канала >> 1