Я опоздал на восемь месяцев, но я наткнулся на этот вопрос и был удивлен, что webDAV не упоминается. Вы можете использовать метод HTTP PUT для загрузки и включить заголовок Content-Range для обработки возобновления и тому подобное. Запрос HEAD скажет вам, если файл уже существует и насколько он большой. Так что, возможно, что-то вроде этого:
1) HEAD удаленного файла
2) Если он существует и имеет размер == локальный размер, загрузка уже выполнена
3) Если размер <локальный размер, добавьте заголовок Content-Range для запроса и найдите соответствующее местоположение в локальном файле. </p>
4) Сделать PUT-запрос на загрузку файла (или части файла, если он возобновляется)
5) Если во время запроса PUT происходит сбой соединения, начните заново с шага 1
Вы также можете перечислять (PROPFIND) и переименовывать (MOVE) файлы, а также создавать каталоги (MKCOL) с помощью dav.
Я считаю, что и Apache, и Lighttpd имеют расширения dav.