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

Blazor WebApp直传文件至MinIO时连接异常关闭问题

问题分析与解决方案

核心错误原因

你用MultipartFormDataContent包装文件流发送PUT请求,但MinIO的预签名PUT接口仅接受原始文件流作为请求体,不支持表单格式。Postman能成功是因为直接将文件内容作为请求体发送,而代码中的表单格式导致MinIO无法解析请求,提前关闭了连接,从而抛出连接被远程主机关闭的异常。

修复代码

替换OnInputFileChange方法中构建请求内容的部分,去掉MultipartFormDataContent,直接使用StreamContent:

private async Task OnInputFileChange(InputFileChangeEventArgs e)
{
    shouldRender = false;
    long maxFileSize = 1024 * 1024 * 1024;

    var selectedFile = e.File;
    if (selectedFile != null)
    {
        try
        {
            file = new() { Name = selectedFile.Name };

            // 获取预签名URL
            var resp = await client.GetUrl();
            if (resp is null) return;

            // 直接使用StreamContent,不需要Multipart包装
            var fileContent = new StreamContent(selectedFile.OpenReadStream(maxFileSize));
            fileContent.Headers.ContentType = new MediaTypeHeaderValue(selectedFile.ContentType);
            // 可选:显式设置Content-Length,避免分块传输可能引发的问题
            fileContent.Headers.ContentLength = selectedFile.Size;
            
            var response = await httpClient.PutAsync(resp, fileContent);
            
            // 验证请求是否成功,失败时直接抛出异常
            response.EnsureSuccessStatusCode();

            uploadResult = new UploadResult
            {
                FileName = selectedFile.Name,
                StoredFileName = "stored_" + selectedFile.Name,
                Uploaded = true
            };
        }
        catch (Exception ex)
        {
            Logger.LogInformation("{FileName} not uploaded (Err: 6): {Message}", selectedFile.Name, ex.Message);
            uploadResult = new UploadResult
            {
                FileName = selectedFile.Name,
                ErrorCode = 6,
                Uploaded = false
            };
        }
    }

    shouldRender = true;
}

额外排查点

  • 确认预签名URL的有效期,确保发送请求时URL未过期
  • 检查MinIO服务器的max_object_size配置,是否超过了你设置的maxFileSize(1GB)
  • 若MinIO使用自签名证书,需确保HttpClient信任该证书(可在Aspire配置中添加相关设置)
  • 检查HttpClient的超时设置,避免大文件上传时超时断开连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:55:16