Мне нужно разобрать и пользовательский сохранить (не используя SaveAs
) HttpPostedFileBase
в моем приложении asp.net mvc.Как читать HttpInputStream дважды
Мой код:
private ReportViewModel LoadFile(Stream stream, string fileName)
{
MapParser mapParser = new MapParser(stream);
try
{
mapParser.Parse();
}
....
stream.position = 0;
SaveFile(memStream2, Server.MapPath("~/Uploads/Maps/" +
(map.Id + "." + ext)));
....
}
public static void SaveFile(Stream inputStream, string filePath)
{
using (Stream file = System.IO.File.Create(filePath))
{
inputStream.CopyTo(file);
}
}
LoadFile(loadMapVM.MapFile.InputStream, loadMapVM.MapFile.FileName)
Итак, мой Parse()
метод работает хорошо, но после этого SaveAs
метода создания файла с 0 байт. Я думаю, что я должен клонировать или снова открывать, чтобы начать мой поток после Parse()
. Но как я могу это сделать?
РЕДАКТИРОВАТЬ
Мой MapParser Код:
public MapParser(Stream stream)
{
using(stream)
{
IWorkbook workBook = null;
if (POIXMLDocument.HasOOXMLHeader(stream))
workBook = new XSSFWorkbook(stream);
if (POIFSFileSystem.HasPOIFSHeader(stream))
workBook = new HSSFWorkbook(stream);
if (workBook == null)
throw new MapParserException(MapParserError.InvalidFileFormat);
mSheet = workBook.GetSheetAt(0);
}
}
public void Parse()
{
mData = new Map();
mData.UnitCode = mSheet.GetRow(0).GetCell(5).GetSafeValue();
if (mData.UnitCode == "")
throw new MapParserException(MapParserError.NoUnitCode, 0, 5);
....
}
Если возможно, вы можете сначала сохранить файл в временном расположении. Затем откройте поток файлов в файл temp и попробуйте разбор. Если синтаксический анализ не удаляет файл temp, если он передает файл перемещения в его постоянное место. Это было бы более эффективно. –
Не могли бы мы увидеть код для MapParser, что он делает с потоком? В противном случае, почему бы не попробовать сначала сохранить поток, а затем сбросить положение пара до 0 и с помощью MapParser? – Dutts
Несомненно, я добавил код –