HttpClient上传大文件至Web API时出现Error while copying content to a stream错误
大文件上传连接中断问题解决方案
1. 调整HttpClient超时设置
默认HttpClient超时为100秒,大文件上传可能因传输耗时超过阈值导致连接中断。初始化HttpClient时设置更长超时:
// 示例:设置5分钟超时 _client = new HttpClient { Timeout = TimeSpan.FromMinutes(5) };
2. 配置服务器端文件大小限制
若使用ASP.NET Core Web API,需同时调整应用级和控制器级限制:
应用级配置(Program.cs/Startup.cs)
builder.Services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = 100 * 1024 * 1024; // 允许最大100MB上传 });
控制器Action限制
[RequestSizeLimit(100 * 1024 * 1024)] [RequestFormLimits(MultipartBodyLengthLimit = 100 * 1024 * 1024)] public async Task<IActionResult> UploadFile() { // 上传处理逻辑 }
IIS托管额外配置(web.config)
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="104857600" /> <!-- 100MB --> </requestFiltering> </security> </system.webServer>
3. 启用分块传输编码
启用分块传输可避免一次性加载整个文件到内存,同时降低连接超时风险:
var content = new MultipartFormDataContent { { new StreamContent(stream), "file", fileName } }; // 开启分块传输 content.Headers.TransferEncodingChunked = true;
4. 检查客户端网络与安全设置
- 确认客户端防火墙、杀毒软件未拦截大文件上传的网络连接
- 排查网络稳定性,避免上传过程中出现丢包或连接中断
5. 重置上传流位置
确保上传前流处于起始位置,防止因流已读取完毕导致传输失败:
stream.Position = 0; // 重置流到起始点后再执行上传逻辑
内容的提问来源于stack exchange,提问作者Dhruv Bagrecha
相关产品推荐
相关产品推荐

