-1

我正在尝试将 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
4

1 回答 1

2

由于阻塞,您DisposeMemoryStreams 传递给构造函数后隐式调用它们。然后,您返回一个对象列表,其中所有内部流都已处置FormFileusingFormFile

FormFile不会复制流的内容,而是(通过ReferencedReadStream)调用类似的方法,如果流已关闭(至少Stream.Read在这种情况下)将抛出异常- 这是由于.MemoryStreamDispose

您没有提供任何信息,例如堆栈跟踪,因此这是一个最佳猜测,但删除该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;
} 
于 2021-01-27T14:32:17.957 回答