0

0

C# 如何从 URL 下载文件_C# URL 文件下载实现指南

畫卷琴夢

畫卷琴夢

发布时间:2025-11-14 12:03:21

|

984人浏览过

|

来源于php中文网

原创

推荐使用 HttpClient 实现 C# 中的文件下载,支持异步与流式处理,适合大文件;2. 可通过自定义流包装器报告进度,并添加请求头和超时设置以提升兼容性与稳定性;3. 注意结合 try-catch 处理网络异常,确保下载可靠性。

c# 如何从 url 下载文件_c# url 文件下载实现指南

在 C# 中从 URL 下载文件是一个常见需求,比如下载图片、文档或软件安装包。实现方式有多种,可根据具体场景选择合适的方法。以下是几种常用且可靠的实现方式。

使用 WebClient(简单快捷)

WebClient 是最简单的下载方式,适合快速实现文件下载功能。

说明: WebClient 封装了底层 HTTP 请求逻辑,使用 DownloadFile 方法可以直接将远程文件保存到本地。

示例代码:

using System.Net;

using (var client = new WebClient())
{
client.DownloadFile("https://example.com/file.pdf", @"C:\Downloads\file.pdf");
}

优点是代码简洁,缺点是 WebClient 在 .NET Core/.NET 5+ 中已被标记为过时,推荐使用 HttpClient。

使用 HttpClient(推荐方式)

HttpClient 更现代、灵活,并支持异步操作,适合在新项目中使用。

说明: 通过 GetByteArrayAsync 或 GetStreamAsync 获取数据流,再写入本地文件。

示例代码(异步下载):

using System.Net.Http;
using System.IO;

using var httpClient = new HttpClient();
var data = await httpClient.GetByteArrayAsync("https://example.com/image.jpg");
await File.WriteAllBytesAsync(@"C:\Downloads\image.jpg", data);

如需处理大文件,避免内存溢出,可使用流式下载:

using var response = await httpClient.GetAsync("https://example.com/largefile.zip", HttpCompletionOption.ResponseHeadersRead);
using var stream = await response.Content.ReadAsStreamAsync();
using var fileStream = new FileStream(@"C:\Downloads\largefile.zip", FileMode.Create, FileAccess.Write);
await stream.CopyToAsync(fileStream);

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

这种方式能有效控制内存使用,适合下载大文件。

添加进度和错误处理

实际应用中需要关注下载进度和网络异常。

建议: 虽然 HttpClient 本身不直接提供下载进度,但可通过自定义流包装器来实现进度报告。同时应包裹 try-catch 处理网络中断、404 错误等情况。

基本异常处理示例:

try
{
using var response = await httpClient.GetAsync(url);
if (response.IsSuccessStatusCode)
{
using var stream = await response.Content.ReadAsStreamAsync();
using var fileStream = new FileStream(filePath, FileMode.Create);
await stream.CopyToAsync(fileStream);
}
else
{
Console.WriteLine($"下载失败:{response.StatusCode}");
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"网络错误:{ex.Message}");
}

设置请求头和超时时间

某些 URL 需要特定请求头(如 User-Agent)才能访问。

说明: 可通过 HttpClient 的 DefaultRequestHeaders 添加必要信息,避免被服务器拒绝。

示例:

httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");
httpClient.Timeout = TimeSpan.FromMinutes(10); // 设置超时

基本上就这些。根据项目环境选择 WebClient 或 HttpClient,优先使用后者。注意处理异常、大文件流式写入和请求头配置,就能稳定实现 URL 文件下载功能。

相关专题

更多
li是什么元素
li是什么元素

li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

407

2023.08.03

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

270

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

386

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1090

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1713

2024.08.16

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.2万人学习

10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号