Помимо отслеживания того, какими были смещения, отмечающие начало ваших сегментов и длину каждого сегмента (если вы не хотите вычислять это при возобновлении, что потребовало бы сортировки списка смещений и вычисления расстояния между двумя из них), вы захотите проверить заголовок Accept-Ranges HTTP-ответа, отправленного сервером, чтобы убедиться, что он поддерживает использование заголовка Range. Лучший способ указать диапазон - это «Диапазон: байты = START_BYTE-END_BYTE», а запрашиваемый диапазон включает как START_BYTE, так и байт END_BYTE, таким образом, состоящий из (END_BYTE-START_BYTE) +1 байт.
Запрос микрочанков - это то, против чего я бы посоветовал, поскольку вы можете попасть в черный список по правилу брандмауэра, чтобы заблокировать HTTP-флуд. В общем, я бы посоветовал вам не делать куски размером менее 1 МБ и не делать более 10 кусков.
В зависимости от того, какой контроль вы планируете иметь при загрузке, если у вас есть элемент управления на уровне сокета, вы можете рассмотреть возможность записи только один раз каждые 32 КБ или асинхронной записи данных.
Я не смог бы прокомментировать идею MMF, но если загруженный файл большой, это не будет хорошей идеей, так как вы израсходуете много оперативной памяти и в конечном итоге даже заставите систему поменяться местами, что не эффективный.
Что касается обработки чанков, вы можете просто создать несколько файлов - по одному на сегмент, опционально предварительно выделить дисковое пространство, заполняя файл на столько \ x00, сколько размер чанка (предварительное распределение может сэкономить вам время, пока вы пишете во время загрузить, но замедлит процесс загрузки), а затем, наконец, просто последовательно записать все фрагменты в окончательный файл.
Одна вещь, которую вы должны остерегаться, это то, что несколько серверов имеют макс. ограничение количества одновременных подключений, и вы не узнаете об этом заранее, поэтому вы должны быть готовы обработать ошибки / тайм-ауты http и изменить размер чанков или создать очередь чанков, если вы создали больше чанков, чем Максимум. соединения.