- порядок беклога и роадмапа назначен слоями: проверки, которым можно верить → долги входа → владелец записи и контракт API → конвейер под тестами → приложение и возможности поверх; у каждого движения записана причина; - заведены восемь задач под пункты «Завершения», которых не закрывала ни одна запись, — цель any-audio-source была без задач вовсе; - у четырёх задач сняты критерии, требовавшие того, что делает задача ниже по очереди; исправлены ссылки на несуществующий repo/sqlite и на отменённую разведку об очереди.
30 lines
2.1 KiB
Markdown
30 lines
2.1 KiB
Markdown
# 🔬 Загрузка большого файла частями
|
|
|
|
- **Тип:** research
|
|
- **Категория:** Очередь — Разведка про докачку идёт после того, как обычная загрузка доведена: иначе сравнивать не с чем.
|
|
- **Зачем:** Гигабайтный файл едет одним запросом, и обрыв на девяноста процентах начинает его заново.
|
|
|
|
Шестичасовая диктофонная запись и видео из семейного архива весят гигабайты, а
|
|
уходят с телефона по сотовой сети. Сегодня приём читает форму целиком и держит
|
|
её в памяти до предела `router.MaxMultipartMemory`; что делать с обрывом,
|
|
неизвестно.
|
|
|
|
Решено начать с одного запроса, а докачку разобрать отдельно — это она.
|
|
|
|
## Вопрос
|
|
|
|
Чем чинить обрыв загрузки большого файла: готовым протоколом докачки, своей
|
|
нарезкой на части поверх обычной формы или пределом размера с отказом, и во что
|
|
каждый вариант обходится на стороне приложения, сервера и обратного прокси.
|
|
|
|
## Куда ляжет ответ
|
|
|
|
`docs/research/upload.md` — вариантами с ценой каждого. Выбор оформляется
|
|
решением в `docs/adr/`, потому что меняет публичный контракт приёма.
|
|
|
|
## Рамки
|
|
|
|
Ответ учитывает обратный прокси перед сервисом: его предел размера тела и
|
|
таймаут — часть цены. Хеш-сумма на стороне приложения разбирается здесь же:
|
|
она решает, можно ли пропустить загрузку целиком.
|