在C#中stream清空以读取和上传Excel文件

我在使用Excel Data Reader的IExcelDataReader读取与AWS SDK API一起的HttpPostedFileBase Excel文件以上载相同的Excel文件时遇到问题。 进行validation以确定文件是上传还是仅用于数据表中,如果validation通过,则会上传一个0 Kb的空Excel文件。

我试过:在使用文件的InputStream之前closures和configurationIExcelDataReader; 创build一个新的stream和上传; 重置InputStream的位置; 并检查此网站的类似问题。 另外,在validation之前放置上传file upload完整的文档,但是随后的IExcelDataReader会抛出“不能使用已处理对象”的错误。

有谁知道如何重用文件InputStream? 提前致谢!

//If save to bucket area is here, upload works, but later logic fails on disposed object IExcelDataReader uploadReader; switch (uploadExtension) { case ".xls": uploadReader = ExcelReaderFactory.CreateBinaryReader(UploadedFile.InputStream); break; case ".xlsx": uploadReader = ExcelReaderFactory.CreateOpenXmlReader(UploadedFile.InputStream); break; default: uploadReader = ExcelReaderFactory.CreateBinaryReader(UploadedFile.InputStream); break; } DataSet excelUploadDataSet = uploadReader.AsDataSet(); var resultSheets = from DataTable sheet in excelUploadDataSet.Tables select sheet.TableName; var excelSheets = resultSheets.ToList(); DataTable excelUpload = excelUploadDataSet.Tables[0]; int excelRows; if ((string)excelSheets[0] != "Info") { //Tried everything in the problem here, to no avail //Save to bucket area using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1)) { PutObjectRequest request = new PutObjectRequest { BucketName = bucketLocation, Key = UploadedFile.FileName, InputStream = UploadedFile.InputStream }; PutObjectResponse response = client.PutObject(request); } } else { //Other logic using data table/IExcelDataReader } 

你有从UploadedFile.InputStream读取的代码(从而寻find最后),然后你尝试通过该stream(位置设置为结束,因此没有任何东西要读取)到其他方法。 由于PutObject不能从stream中读取任何内容并发送空的数据。

可能的固定位置为0(请参阅Stream.Seek(0,SeekOrigin.Begin)或Position = 0 ),但是请注意,在很多情况下,stream是不可search的(即,在ASP.Net中上传的文件) – 在这种情况下,您需要要么读取一次stream或复制本地(即到MemoryStream )多次读取。