При отсутствии необходимости авторизации и частичной загрузки, WebClient.DownloadData
или WebClient.DownloadDataAsync
будет предпочтительным способом загрузки файла с сервера.
Вы все еще можете использовать WebClient
для авторизации, установив Credentials
в вашем WebClient
экземпляре объекта. Если пользователь не авторизован для загрузки файла на основе этих учетных данных, сервер может вернуть 404 (Не найдено) или 403 (Запрещено).
Если ваш сервер поддерживает HTTP 1.1, клиент может начать с середины файла. Для этого вам нужно создать класс, который наследуется от WebClient
и переопределить метод GetWebRequest
. Затем этот метод установит заголовки для позиционного GET.
class MyWebClient : WebClient
{
public int StartDownloadAt { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
req.AddRange(position_to_start);
}
}
И в коде, который его использует:
MyWebClient client = new MyWebClient();
client.StartDownloadAt = 1024 * 2024; // start download 1 megabyte into file.
client.DownloadData(...);
Выше приведен только пример. Возможно, вы захотите сделать это более устойчивым, установив для свойства StartDownLoadAt
значение 0, когда загрузка будет завершена (или прервана), и не выполняйте AddRange
, если StartdownloadAt
установлено на 0. Для полной поддержки диапазонов вам, вероятно, понадобятся свойства для начального и конечного диапазона и т. д.
И, конечно же, клиенту придется обрабатывать сшивание разрозненных загруженных фрагментов после завершения загрузки.
Суть в том, что это возможно с небольшой работой, используя класс WebClient
.