В бизнес-приложении, которое я создаю, мы разрешаем нашим администраторам загружать CSV-файл с определенными данными, которые анализируются и вводятся в наши базы данных (происходит вся соответствующая обработка ошибок и т. Д.).Загрузка файла: MemoryStream против файловой системы
В рамках обновления до .NET 4.5 мне пришлось обновить некоторые аспекты этого кода, и, пока я это делал, я столкнулся с this answer тем, кто использует MemoryStream для обработки загруженных файлов, в отличие от временно сохраняя файловую систему. Нет никакой реальной причины для меня (и, может быть, это даже плохо), но я хотел дать ему шанс немного научиться. Таким образом, я быстро выгружена этот код (от сильно типизированных модели за счет загрузки других метаданных):
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 нет ничего действительно (хотя я не уверен в этом). Я знаю, что это может быть длинный выстрел, но есть ли что-то очевидное, что я здесь отсутствует или что-то могу сделать, чтобы лучше отладить это?
правильный ответ, избили меня на несколько секунд :) –