早上好 - 我正在尝试将 HttpPostedFileBase(它始终是一个简单的 CSV 文件)保存到一个会话变量中,如下所示:
[HttpPost]
public ActionResult Index(HttpPostedFileBase importFile) {
Session.Remove("NoteImport");
var noteImport = new NoteImport { ImportFile = importFile, HeaderList = NoteService.HeaderList(importFile) };
Session["NoteImport"] = noteImport;
return RedirectToAction("FileNote");
}
如您所见,我将 importFile 转储到我的 NoteImport 类中。目前, ImportFile 属性是可公开访问的 HttpPostedFileBase 类型。
我第一次在我的服务中使用这个属性(创建标题值列表的方法),我没有问题:
public List<string> HeaderList(HttpPostedFileBase fileStream) {
var sr = new StreamReader(fileStream.InputStream);
var headerString = sr.ReadLine();
var headerArray = headerString.Split(',');
var headerList = new List<string>();
foreach (var header in headerArray) {
if (!ValidateHeader(header))
throw new InvalidDataException("Invalid header name: " + header);
headerList.Add(header);
}
return headerList;
}
以上工作正常,并且暂时返回了我需要的内容。
我的问题是下面的代码。当我调用 ReadLine() 时,它不会从 HttpPostedFileBase 中得到任何东西。
public List<string> ImportFileStream(HttpPostedFileBase importFile) {
var sr = new StreamReader(importFile.InputStream);
var headerString = sr.ReadLine();
var headerArray = headerString.Split(',');
var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," };
foreach (var header in headerArray) {
cb.AddField(header, typeof(string));
cb.LastField.FieldQuoted = true;
cb.LastField.QuoteChar = '"';
}
var engine = new FileHelperEngine(cb.CreateRecordClass());
var dataTable = engine.ReadStreamAsDT(sr);
var noteData = new List<string>();
var jsonSerializer = new JsonSerializeDataRow();
foreach (var row in dataTable.Rows) {
var dataRow = row as DataRow;
var jsonRow = jsonSerializer.Serialize(dataRow);
noteData.Add(jsonRow);
}
return noteData;
}
我试图关闭 HttpPostedFileBase;我还将流位置设置为 0。似乎没有任何进展。我有一种感觉,我需要在保存到会话之前将其更改为不同的类型。
有什么建议吗??
谢谢!