使用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
相关产品推荐
相关产品推荐

