溫馨提示×

c# httpwebrequest如何處理大文件

c#
小樊
81
2024-11-16 20:48:52
欄目: 編程語言

在C#中,使用HttpWebRequest處理大文件時,需要考慮分塊傳輸和斷點續(xù)傳。以下是一個簡單的示例,展示了如何使用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; // 每次讀取的數(shù)據(jù)塊大小,例如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("按任意鍵繼續(xù)...");
                Console.ReadKey();
            }
        }
    }
}

在這個示例中,我們使用了WebClient類來下載大文件。我們設置了DownloadFileCompletedDownloadProgressChanged事件處理器,以便在下載完成或進度更改時執(zhí)行相應的操作。

我們使用UseDefaultCredentials屬性設置了默認憑據(jù),以便在需要身份驗證的情況下進行下載。我們還使用Headers.Add方法添加了Range頭,以便將下載范圍設置為從0字節(jié)開始。這樣,瀏覽器將從文件的第一個字節(jié)開始下載,直到遇到Content-Range響應頭為止。

最后,我們使用FileStream類將下載的數(shù)據(jù)寫入本地文件。我們設置了緩沖區(qū)大小,以便一次讀取1MB的數(shù)據(jù)。當用戶按下任意鍵時,下載將停止。

0