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

使用MinIO上传MemoryStream时遇UnexpectedShortReadException错误求助

解决Min.IO上传MemoryStream时的UnexpectedShortReadException异常

问题原因

将IFormFile复制到MemoryStream后,流的Position指针停在流的末尾,此时MinIO尝试从当前位置读取数据,自然读不到任何内容,从而触发UnexpectedShortReadException异常。

修复方案

在调用PutObjectAsync前,将MemoryStream的Position重置为0,让MinIO从流的起始位置读取数据:

public async Task UploadFileAsync(IFormFile image)
{
    using (var ms = new MemoryStream())
    {
        image.CopyTo(ms);
        // 重置流的读取位置到起始点
        ms.Position = 0;
        var args = new Minio.DataModel.Args.PutObjectArgs { }
                .WithBucket(bucket)
                .WithObject("test-" + Guid.NewGuid().ToString())
                .WithContentType(image.ContentType)
                .WithStreamData(ms)
                .WithObjectSize(ms.Length);
        await minioClient.PutObjectAsync(args);
    }
}

优化建议

异步场景下推荐使用CopyToAsync替代同步的CopyTo,提升性能:

public async Task UploadFileAsync(IFormFile image)
{
    using (var ms = new MemoryStream())
    {
        await image.CopyToAsync(ms);
        ms.Position = 0;
        var args = new Minio.DataModel.Args.PutObjectArgs { }
                .WithBucket(bucket)
                .WithObject("test-" + Guid.NewGuid().ToString())
                .WithContentType(image.ContentType)
                .WithStreamData(ms)
                .WithObjectSize(ms.Length);
        await minioClient.PutObjectAsync(args);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:22:44