C# http断点续传下载源码
在C#中实现HTTP断点续传通常需要客户端支持Range请求头,以便请求下载文件的特定部分。以下是一个简单的示例,展示了如何使用HttpClient发送Range请求以实现断点续传:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
string url = "http://example.com/large-file.zip"; // 替换为你要下载的文件URL
string destinationPath = "downloaded-file.zip"; // 替换为你的目标文件路径
using (HttpClient httpClient = new HttpClient())
{
// 获取文件大小
HttpResponseMessage response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();
long fileLength = response.Content.Headers.ContentLength.Value;
// 打开文件用于追加写入
using (FileStream fileStream = new FileStream(destinationPath, FileMode.OpenOrCreate, FileAccess.Write))
{
// 定位到文件末尾
fileStream.Seek(0, SeekOrigin.End);
// 设置Range头部,从文件末尾开始
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Range = new RangeHeaderValue(fileStream.Length, fileLength - 1);
// 发送Range请求
response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
// 将响应内容写入文件
await response.Content.CopyToAsync(fileStream);
}
}
}
}
这段代码首先通过HttpClient获取文件大小,然后打开目标文件用于追加写入。之后,它设置了Range头部,指定从文件当前长度开始下载,并将下载的内容写入文件。这样可以实现从上次中断的地方继续下载文件,实现断点续传。
提示:AI自动生成,仅供参考。