You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core WebAPI部署Azure App Service后大文件上传Blob存储失败

解决Azure App Service中.NET Core WebAPI大文件上传Blob存储失败的问题

问题根源

本地运行正常但部署到Azure后提示文件过大,主要是三个层面的问题:

  1. .NET Core WebAPI的请求大小限制未全局覆盖
  2. Azure App Service平台默认的请求大小限制(仅30MB)
  3. 代码本身的流操作错误及资源管理问题

解决方案步骤

1. 全局配置WebAPI请求大小限制

仅在接口上加属性可能存在局部失效的情况,需要在全局配置中同步设置:

// .NET 6+ 在Program.cs中添加
builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 6104857600; // 6GB
    options.ValueLengthLimit = 6104857600;
});

// .NET 5及更早版本 在Startup.cs的ConfigureServices中添加

2. 修改Azure App Service平台限制

Azure App Service默认限制请求大小为30MB,必须手动调整:

  • 登录Azure门户,进入你的App Service资源
  • 找到配置 -> 常规设置
  • 找到最大请求大小,设置为你需要的值(比如6000,单位为MB)
  • 保存配置后重启App Service

3. 修正代码中的错误并优化

你的代码存在流位置错误、不必要的本地文件写入、资源未正确释放等问题,修正后的代码如下:

[RequestFormLimits(MultipartBodyLengthLimit = 6104857600)]
[RequestSizeLimit(6104857600)]
public async Task<IActionResult> Upload(IFormFile filePosted)
{
    if (filePosted == null || filePosted.Length == 0)
    {
        return BadRequest("未上传有效文件");
    }

    // 直接使用IFormFile的流上传,无需中转本地文件或MemoryStream
    var blobServiceClient = new BlobServiceClient("你的Blob存储连接字符串");
    var containerClient = blobServiceClient.GetBlobContainerClient("你的容器名称");
    await containerClient.CreateIfNotExistsAsync(); // 确保容器存在

    var blobClient = containerClient.GetBlobClient(filePosted.FileName);
    var uploadOptions = new BlobUploadOptions
    {
        TransferOptions = new StorageTransferOptions
        {
            MaximumConcurrency = 8,
            MaximumTransferSize = 220 * 1024 * 1024 // 220MB分片上传
        }
    };

    // 重置流位置到开头,避免上传空内容
    using var fileStream = filePosted.OpenReadStream();
    fileStream.Position = 0;
    await blobClient.UploadAsync(fileStream, uploadOptions);

    return Ok(new { 上传状态 = "成功", Blob地址 = blobClient.Uri.ToString() });
}

4. 额外优化建议

  • 对于1GB以上的超大文件,推荐生成Blob SAS URL让客户端直接上传,绕过WebAPI的带宽和限制,减轻服务器压力
  • 添加上传日志,方便排查Azure环境中的异常
  • 启用Azure App Service的诊断日志,查看请求失败的具体原因

内容的提问来源于stack exchange,提问作者Rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:45:49