首页 > 解决方案 > C# - 在我的 MVC 项目中读取文件内存流时出现问题

问题描述

由于我的代码如下所示,上传的图像文件有时会被读取为空(fileContents设置为 0)或半读取。fileContents正如我所测试的那样,当我慢慢地从使用调试模式过渡myViewModel.File.CopyToAsync(memoryStream);到使用调试模式时,我可以看到它正在接收正确的值myViewModel.Image =...。所以我相信内存流副本存在问题,但我不明白为什么。

但是,当我通过删除评论来休眠线程时,会正确System.Threading.Thread.Sleep(1000);读取图像并fileContents获得正确的值。问题可能是由声明引起的using (var memoryStream = new MemoryStream())吗?问题是由什么引起的,有没有更好的方法来解决这个问题,而不是让线程休眠?

  if (myViewModel.File != null)
        {
            byte[] fileContents;
            using (var memoryStream = new MemoryStream())
            {
                myViewModel.File.CopyToAsync(memoryStream);
                //System.Threading.Thread.Sleep(1000);
                fileContents = memoryStream.ToArray();
                myViewModel.Image = new MyImage{ FileName = myViewModel.File.FileName, File = myViewModel.File, ContentType = myViewModel.File.ContentType, FileData = fileContents };
            }
        }

标签: c#model-view-controllermemorystream

解决方案


问题是您正在调用异步方法而不等待它。

myViewModel.File.CopyToAsync(memoryStream);

你可以重写你的方法async并使用这个词await吗?

然后您可以等待 CopyToAsync 方法。

await myViewModel.File.CopyToAsync(memoryStream);


推荐阅读