上传超28.5MB文件至Blob存储时遇连接重置问题求助
解决大文件上传Blob存储时连接重置&HttpPost未触发的问题
听起来你遇到的是典型的ASP.NET Core请求大小限制导致的问题,毕竟28.5MB这个阈值刚好接近框架默认的配置上限。我来给你拆解几个排查和解决的方向:
1. 调整ASP.NET Core的表单请求大小配置
默认情况下,ASP.NET Core会限制表单请求的总大小,防止恶意大请求压垮服务器。你需要在项目配置里修改两个关键参数:
全局表单大小限制
在Program.cs里添加全局配置:
builder.Services.Configure<FormOptions>(options => { // 这里设置为100MB,你可以根据需求调整 options.MultipartBodyLengthLimit = 104857600; // 计算方式:100*1024*1024 });
单个上传接口的大小限制
如果你的上传接口有单独的特性标记,也要同步调整数值:
[HttpPost] [RequestSizeLimit(104857600)] // 允许该接口接收最大100MB的请求 public async Task<IActionResult> UploadFiles() { // 你的上传逻辑代码 }
2. 检查Kestrel服务器的请求限制
Kestrel本身也有请求体大小的限制,需要在appsettings.json里补充配置:
"Kestrel": { "Limits": { "MaxRequestBodySize": 104857600 // 同样设置为100MB } }
或者通过Program.cs代码配置:
builder.WebHost.ConfigureKestrel(options => { options.Limits.MaxRequestBodySize = 104857600; });
3. 确认表单提交的前端逻辑
如果是用AJAX提交表单,要确保FormData的处理正确,不要手动设置错误的请求头:
const fileInput = document.getElementById('files'); const formData = new FormData(); // 遍历选中的文件添加到FormData for (const file of fileInput.files) { formData.append('UploadFiles', file); } // 发起上传请求 fetch('/YourController/UploadFiles', { method: 'POST', body: formData }) .then(res => res.json()) .catch(err => console.error('上传失败:', err));
注意:不要手动设置Content-Type: multipart/form-data,浏览器会自动处理并添加正确的边界标识,手动设置反而可能导致解析失败。
4. 大文件推荐用Blob分块上传
如果文件超过100MB,直接单文件上传很容易出现超时或连接问题,建议用Azure Blob存储的分块上传功能,通过SDK实现更稳定:
using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; public async Task UploadLargeFileToBlob(IFormFile file, string blobConnStr, string containerName) { var blobServiceClient = new BlobServiceClient(blobConnStr); var containerClient = blobServiceClient.GetBlobContainerClient(containerName); var blobClient = containerClient.GetBlobClient(file.FileName); // 配置分块参数,比如每块10MB,支持断点续传 var uploadOptions = new BlobUploadOptions { TransferOptions = new StorageTransferOptions { MaximumConcurrency = 2, InitialTransferSize = 10 * 1024 * 1024, MaximumTransferSize = 10 * 1024 * 1024 } }; await blobClient.UploadAsync(file.OpenReadStream(), uploadOptions); }
最后排查点
如果以上配置都调整后还是有问题,建议检查:
- 服务器的反向代理(比如IIS、Nginx)是否有额外的请求大小限制,比如IIS的
maxAllowedContentLength配置 - 浏览器控制台的网络请求详情,是否返回
413 Request Entity Too Large这类明确的错误码
内容的提问来源于stack exchange,提问作者CBreeze
相关产品推荐
相关产品推荐

