【发布时间】:2013-03-24 09:03:26
【问题描述】:
在我正在创建的商业应用程序中,我们允许管理员上传包含某些数据的 CSV 文件,这些数据会被解析并输入到我们的数据库中(正在发生所有适当的错误处理等)。
作为升级到 .NET 4.5 的一部分,我不得不更新这段代码的一些方面,并且在我这样做的同时,我遇到了使用 MemoryStream 处理上传文件的人的this answer,而不是临时保存到文件系统。我没有真正的理由去改变(甚至可能更糟糕),但我想尝试一下来学习一下。所以,我迅速换掉了这段代码(由于上传了其他元数据,从强类型模型中):
HttpPostedFileBase file = model.File;
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName);
file.SaveAs(path);
CsvParser csvParser = new CsvParser();
Product product = csvParser.Parse(path);
this.repository.Insert(product);
this.repository.Save();
return View("Details", product);
到这里:
using (MemoryStream memoryStream = new MemoryStream())
{
model.File.InputStream.CopyTo(memoryStream);
CsvParser csvParser = new CsvParser();
Product product = csvParser.Parse(memoryStream);
this.repository.Insert(product);
this.repository.Save();
return View("Details", product);
}
不幸的是,当我这样做时,事情就中断了——我的所有数据都带有空值,而且 MemoryStream 中似乎实际上没有任何内容(尽管我对此并不积极)。我知道这可能是一个长镜头,但有什么明显的我在这里遗漏或我可以做些什么来更好地调试它?
【问题讨论】: