c# - 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 };
}
}
解决方案
问题是您正在调用异步方法而不等待它。
myViewModel.File.CopyToAsync(memoryStream);
你可以重写你的方法async
并使用这个词await
吗?
然后您可以等待 CopyToAsync 方法。
await myViewModel.File.CopyToAsync(memoryStream);
推荐阅读
- java - ElasticSearch query with not contains
- r - 计算 data.table 中每个月不同股票数量的平均月收益
- php - 使用 Google Sheets API 复制整个电子表格
- python - matplotlib 时间序列 TypeError:无效的类型提升
- keycloak - 在 Keycloack 中禁用清除事件日志
- php - Laravel 7 Composer 安装错误异常
- javascript - 如何使用 Java 脚本隐藏 SharePoint 上的列视图
- c# - 如何检测 Iframe 是否已在 C# 中加载
- bash - 我想从数组追加到文件
- google-colaboratory - 在 Google Colab(R 笔记本)上安装 RcppGSL 失败