aliyun / aliyun-oss-csharp-sdk

Aliyun OSS SDK for C#
MIT License
381 stars 206 forks source link

IFormFile类型表单文件直接Save到MemoryStream实例后,PutObject失败 #68

Open bogerv opened 6 years ago

bogerv commented 6 years ago

环境: .Net Core 环境下, Aliyun.OSS.dll 版本 2.8.0 具体描述: var files = Request.Form.Files; using (MemoryStream ms = new MemoryStream()) { files[i].CopyTo(ms); PutObjectResult result = _ossClient.PutObject(_ossSettings.Value.BucketName, key, ms); } 如上代码会报 Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: startIndex 错误, 源码调试貌似 Aliyun.OSS.Common.Handlers.Crc64CheckHandler Handle方法中 var sdkCalculatedHash = BitConverter.ToUInt64(stream.CalculatedHash, 0); 此行代码报错, 因为 stream.CalculatedHash的值为 byte[], 不为空但没有值, 长度为0, 所以 Convert 失败, 导致上传不成功 如果将上诉代码的ms换成文件路径则可以成功上传 请问有什么解决办法吗

zhanfu86 commented 4 years ago

我也是这个问题,但是.net framework 版本, using (MemoryStream ms = new MemoryStream()) { img.Save(ms, ImageFormat.Jpeg); client.PutObject(bucketName, Guid.NewGuid().ToString("N") + ".jpg", ms); } 如果将img.save到本地文件再上传是正常的!

Huiyebaby commented 4 years ago

files[i].CopyTo(ms); 已经解决。这个东西不好使 请换成 files[i].OpenReadStream [HttpPost] public IActionResult xxxxxx(IList files) { long size = 0; foreach (var file in files) { file.OpenReadStream(); } }

929496959 commented 7 months ago

我今天也遇到了这种 改成文件就可以了 用Stream 报错数组越界

labyte commented 6 days ago

在 blazor 中,不能使用文件路径啊,只能使用stream,一直报数组越界,有解决方法吗,我改为官网使用的 异步方式上传,但是上传后为 0 KB,很狗屎,上个周拖到这个周,就搞这个鬼东西