我正在尝试将base64String列表转换为IFormFile列表。当我尝试MemoryStream stream = new MemoryStream(bytes)
时,我得到了一个stream.ReadTimeout SystemInvalidOperation
。为什么不起作用了?
这是我的代码:
private async Task<List<IFormFile>> Base64ToImage(List<EquipmentFile> equipmentFiles)
{
List<IFormFile> formFiles = new List<IFormFile>();
foreach (var eqp in equipmentFiles)
{
byte[] bytes = Convert.FromBase64String(eqp.File);
MemoryStream stream = new MemoryStream(bytes);
IFormFile file = new FormFile(stream, 0, bytes.Length, eqp.Name, eqp.Name);
formFiles.Add(file);
}
return formFiles;
}
我的堆栈痕迹:
System.InvalidOperationException: Timeouts are not supported on this stream.
at System.IO.Stream.get_ReadTimeout()
at FieldService.CallCenter.Api.Controllers.EquipmentLibraryController.Base64ToImage(List`1 equipmentFiles) in C:\Users\CMTech-DEV\Documents\cmtech\fieldservice-api\src\CallCenter\FieldService.CallCenter.API\Controllers\EquipmentLibraryController.cs:line 331
at System.IO.Stream.get_ReadTimeout()
at FieldService.CallCenter.Api.Controllers.EquipmentLibraryController.Base64ToImage(List`1 equipmentFiles) in C:\Users\CMTech-DEV\Documents\cmtech\fieldservice-api\src\CallCenter\FieldService.CallCenter.API\Controllers\EquipmentLibraryController.cs:line 331
发布于 2021-01-27 14:32:17
在将Dispose
传递给FormFile
构造函数(由于using
块的原因)之后,您将在using
上隐式调用using
。然后返回一个FormFile
对象列表,其中的内部流都是释放的。
FormFile
不复制流的内容,而是(通过ReferencedReadStream
)调用像Stream.Read
这样的方法,这些方法(至少在MemoryStream
的情况下)将如果流已关闭,则引发异常。--这是由Dispose
实现的。
您没有提供任何信息,比如堆栈跟踪,所以这是最好的猜测,但是删除using
块应该足以解决这个问题。
private List<IFormFile> Base64ToImage(List<EquipmentFile> equipmentFiles)
{
List<IFormFile> formFiles = new List<IFormFile>();
foreach (var eqp in equipmentFiles)
{
byte[] bytes = Convert.FromBase64String(eqp.File);
MemoryStream stream = new MemoryStream(bytes);
IFormFile file = new FormFile(stream, 0, bytes.Length, eqp.Name, eqp.Name);
formFiles.Add(file);
}
return formFiles;
}
https://stackoverflow.com/questions/65920854
复制相似问题