首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图将base64String转换为IFormFile会在C#中引发SystemInvalidOperation异常

试图将base64String转换为IFormFile会在C#中引发SystemInvalidOperation异常
EN

Stack Overflow用户
提问于 2021-01-27 14:10:42
回答 1查看 5.4K关注 0票数 3

我正在尝试将base64String列表转换为IFormFile列表。当我尝试MemoryStream stream = new MemoryStream(bytes)时,我得到了一个stream.ReadTimeout SystemInvalidOperation。为什么不起作用了?

这是我的代码:

代码语言:javascript
运行
复制
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;
}

我的堆栈痕迹:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-27 14:32:17

在将Dispose传递给FormFile构造函数(由于using块的原因)之后,您将在using上隐式调用using。然后返回一个FormFile对象列表,其中的内部流都是释放的

FormFile不复制流的内容,而是(通过ReferencedReadStream)调用像Stream.Read这样的方法,这些方法(至少在MemoryStream的情况下)将如果流已关闭,则引发异常。--这是由Dispose实现的。

您没有提供任何信息,比如堆栈跟踪,所以这是最好的猜测,但是删除using块应该足以解决这个问题。

代码语言:javascript
运行
复制
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;
} 
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65920854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档