おはようございます-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に設定しました。何も起きていないようです。セッションに保存する前に、別のタイプに変更する必要があると感じています。
何かアドバイス??
ありがとう!