在C#中,使用HttpWebRequest處理大文件時,需要考慮分塊傳輸和斷點續傳。以下是一個簡單的示例,展示了如何使用HttpWebRequest分塊下載大文件:
using System;
using System.IO;
using System.Net;
using System.Text;
class Program
{
static void Main()
{
string url = "https://example.com/largefile.zip"; // 替換為你要下載的大文件的URL
string localFilePath = "largefile.zip"; // 保存到本地的文件名
int bufferSize = 1024 * 1024; // 每次讀取的數據塊大小,例如1MB
using (WebClient webClient = new WebClient())
{
webClient.DownloadFileCompleted += (sender, e) =>
{
Console.WriteLine("下載完成");
};
webClient.DownloadProgressChanged += (sender, e) =>
{
Console.WriteLine($"下載進度: {e.ProgressPercentage}%");
};
webClient.UseDefaultCredentials = true;
webClient.Headers.Add("Range", $"bytes={0}-"); // 設置分塊下載范圍
using (Stream fileStream = new FileStream(localFilePath, FileMode.Create, FileAccess.Write))
{
webClient.DownloadFileAsync(new Uri(url), fileStream, bufferSize);
Console.WriteLine("按任意鍵繼續...");
Console.ReadKey();
}
}
}
}
在這個示例中,我們使用了WebClient
類來下載大文件。我們設置了DownloadFileCompleted
和DownloadProgressChanged
事件處理器,以便在下載完成或進度更改時執行相應的操作。
我們使用UseDefaultCredentials
屬性設置了默認憑據,以便在需要身份驗證的情況下進行下載。我們還使用Headers.Add
方法添加了Range
頭,以便將下載范圍設置為從0字節開始。這樣,瀏覽器將從文件的第一個字節開始下載,直到遇到Content-Range
響應頭為止。
最后,我們使用FileStream
類將下載的數據寫入本地文件。我們設置了緩沖區大小,以便一次讀取1MB的數據。當用戶按下任意鍵時,下載將停止。