Чтение HttpPostedFile перед его сохранением сохраняет пустой файл в ASP. NET MVC

Перед сохранением загруженного CSV-файла я хочу проверить, будет ли он проанализирован. Когда я просто сохранял файл, все было хорошо, теперь, когда я сначала его читаю, сохраненный файл пустой.

Вот мой метод действия

[HttpPost]
public ActionResult Import(HttpPostedFileBase file)
{
    // Check parse went ok
    using (var fileStream = file.InputStream)
    {
        if (!MemberFileParsingService.CheckFileWillParse(fileStream))
        {
            ViewBag.Message = "There was a problem with the file";
            return View();
        }
    }

    // Save file so we can work on it in next action
    file.SaveAs(Server.MapPath(fileName));

    return RedirectToAction("ImportMatch", new { club = ActiveClub.Url });
}

А вот мой метод, который проверяет, правильно ли разбирается файл. Он использует CsvReader для чтения всего файла, чтобы убедиться в отсутствии ошибок. CsvReader выдает исключения, когда дело доходит до плохих битов файла.

public static bool CheckFileWillParse(Stream fileStream)
{
    try
    {
        using (var reader = new StreamReader(fileStream))
        {
            using (CsvReader csv = new CsvReader(reader, false))
            {
                while (csv.ReadNextRecord()) { }
            }
        }
    }
    catch(Exception)
    {
        return false;
    }
    return true;
}

Я думаю, это, вероятно, потому, что он пытается записать файл с использованием того же потока, который сейчас находится в конце файла. Я не знаю, как сбросить поток. Я надеялся, что все мои операторы using решат эту проблему.

Так как мне сбросить поток, или это просто отвлекающий маневр?

Обновление: Обнаружено, что длина потока сбрасывается до нуля после прохождение CheckFileWillParse, поэтому похоже, что сброс потока - это отвлекающий маневр, и поток на самом деле каким-то образом блокируется.

7
задан Richard Garside 16 December 2010 в 16:02
поделиться