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

Blazor Server(.NET6)上传5MB文件至Azure容器报错,求解决方案

解决方案

问题根源

报错的直接原因是Blazor Server中InputFile.OpenReadStream()方法默认限制最大文件大小为500KB(512000字节),这与Azure Blob Storage本身的容量限制无关。同时,当前代码将整个文件加载到内存中再上传的方式,对大文件来说既不高效也容易引发内存压力。

修复步骤

  1. 调整OpenReadStream的最大允许大小
    调用OpenReadStream时显式指定允许的最大文件大小(可根据业务需求设置,例如100MB)。

  2. 直接流式上传到Azure Blob
    跳过将文件内容复制到MemoryStream和转换为BinaryData的冗余步骤,直接将用户上传的流传递给Azure Blob的UploadAsync方法。Azure存储SDK会自动处理大文件的分块上传,且不会导致文件损坏。

  3. 可选:配置服务器端请求大小限制
    若需上传超过30MB的文件,需在服务器端调整请求大小限制,避免被Kestrel或Blazor Hub拦截。

修正后的代码

// Get the file from file picker
var file = e.Files.FirstOrDefault();    
if (file == null) return;

BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

// Get or create the container in azure
BlobContainerClient blobContainer = blobServiceClient.GetBlobContainerClient("uploadfiles");
var containerResponse = await blobContainer.CreateIfNotExistsAsync();

if (containerResponse != null && containerResponse.GetRawResponse().Status == 201)
{
    await blobContainer.SetAccessPolicyAsync(Azure.Storage.Blobs.Models.PublicAccessType.Blob);
}

// Create the blob in container
BlobClient blobClient = blobContainer.GetBlobClient(file.Name);

// 打开流时指定最大允许大小(示例为100MB,可按需调整)
using var stream = await file.OpenReadStreamAsync(maxAllowedSize: 100 * 1024 * 1024);

// 直接流式上传,SDK自动处理分块与合并
var uploadResponse = await blobClient.UploadAsync(stream, overwrite: true);

额外配置(针对超大文件)

如果需要上传超过30MB的文件,在Program.cs中添加以下配置:

builder.Services.AddServerSideBlazor()
    .AddHubOptions(options =>
    {
        options.MaximumReceiveMessageSize = 100 * 1024 * 1024; // 设置为100MB
    });

// 配置Kestrel请求大小限制
builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.MaxRequestBodySize = 100 * 1024 * 1024; // 设置为100MB
});

也可在特定页面组件上添加[RequestSizeLimit(100 * 1024 * 1024)]属性,单独限制该页面的请求大小。

关于分块上传的说明

Azure存储SDK的UploadAsync方法在处理大于4MB的文件时,会自动采用分块(Block Blob)上传模式:将文件拆分为默认4MB的块逐个上传,全部完成后自动合并所有块形成完整文件。整个过程内置失败重试与块验证机制,不会出现文件损坏问题,无需手动实现分块逻辑。

内容的提问来源于stack exchange,提问作者mnu-nasir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:54