C # WebStream стремиться скачать файл в «чанках» - PullRequest
4 голосов
/ 07 августа 2011

Я пытаюсь сделать небольшую программу для загрузки файлов через HTTP в C #. Базовая загрузка с WebClient работает нормально, но теперь я хотел попробовать загрузка файла с несколькими подключениями. Пока что:

HttpWebRequest HttpRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse HttpResponse = (HttpWebResponse)HttpRequest.GetResponse();
Stream ResponseStream = HttpResponse.GetResponseStream();

FileStream FSChunk = new FileStream(destination, FileMode.OpenOrCreate, FileAccess.Write);

while ((BytesThisRead = ResponseStream.Read(Buffer, 0, (int)BytesPerRead)) != 0)
{
    FSChunk.Write(Buffer, 0, BytesThisRead);
    TotallyRead += BytesThisRead;
    if (TotalReadLength - TotallyRead < buffersize)
        BytesPerRead = TotalReadLength - TotallyRead;
}

Я могу загрузить Файл, используя этот ResponseStream, также разделенный на 2 части, используя один ResponseStream. Моя проблема в том, что WebStreams не доступны для поиска, поэтому я не могу просто установить позицию для чтения. Как мне удается загрузить один файл по HTTP одновременно, используя разные потоки (соединения, я думаю, один поток не может использоваться несколькими участниками). Я прочитал много статей здесь и несколько часов гуглил, но не могу найти решение. Имеет ли отношение кодирование передачи Chunked к этой теме?

С наилучшими пожеланиями, Damon

1 Ответ

4 голосов
/ 07 августа 2011

вам нужно позвонить AddRange по запросу - это установит content range в http header, который сообщает серверу, какую часть файла вы запрашиваете.

см. http://msdn.microsoft.com/en-us/library/dd992108.aspx

...