2014-01-18 2 views
5

Я использую golang как инструмент программирования по выбору.Как скачать файл с поддержкой резюме?

Что я хотел написать это программа, которая загружает большие файлы с поддержкой докачки, используя запросы диапазона в заголовках HTTP что-то похожее на aria2c.

+1

Текущий ответ полезен, если вы знаете, что собираетесь использовать только http для загрузки. Если вы хотите поддерживать более широкий диапазон протоколов, я бы предложил вам найти привязку к libcurl - или что-то подобное. – Cubic

+1

Идет с libcurl на самом деле хороший подход. Фактически я нашел пакет https://github.com/go-av/curl, который делает довольно аккуратный материал, написанный на Go-Lang, и содержит почти то, что мне нужно, с момента извлечения файла. – Degreane

+0

[getparty] (https://github.com/vbauerster/getparty) - может быть то, что вы ищете. Он написан в Go, используя пакет «het/http», и может разделять файл загрузки. Возобновление также поддерживается. –

ответ

5

Чтобы сделать это, вы должны изучить часть 14.16 - Content-Range - в RFC document describing the HTTP/1.1 protocol, а затем применить эти знания, чтобы манипулировать набор HTTP-заголовков, когда посланный запрос клиента выполняется - см documentation и примеры там.

Чтобы рассчитать диапазон запроса, чтобы продолжить скачивание, вы должны получить размер текущего файла. Это можно найти в результатах, возвращаемых функцией Stat(), которую можно вызвать по открытому файлу - *os.File, возвращенный вызовом os.Open().

Вам следует открыть файл в режиме добавления, а затем использовать что-то вроде io.Copy() для потоковой передачи данных из файла ответа HTTP-ответа Body в файл-объект.

Проведите собственное исследование того, как читать данные из ответов HTTP в Go - они изобилуют в Интернете.

Смежные вопросы