Доброе утро - я пытаюсь сохранить 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. Кажется, ничего не происходит.У меня такое чувство, что мне нужно изменить его на другой тип перед сохранением в сеансе.
Любой совет ??
Спасибо!