我正在尝试使用DotNetZip 1.9在Asp.Net MVC 3中读取上传的zip文件。 我已经验证我收到的HttpPostedFileBase对象很好。我可以将它保存到磁盘然后解压缩。但是,首先保存到磁盘似乎很浪费,因为我应该能够直接从内存中解压缩。
从MSDN,HttpPostedFileBase.InputStream属性“获取一个Stream对象,该对象指向上传的文件以准备读取文件的内容”。
根据DetNetZip的引用,ZipFile.Read()可以接受Stream对象。所以我试了一下,DotNetZip抛出BadReadException。我附加了显示问题的屏幕截图。
从HttpInputStream解压缩问题
InputStream的值,Length与上传的zip文件的值相匹配
帮助任何人? THX
答案 0 :(得分:9)
我怀疑ZipFile.IsZipFile
方法调用已提升您的InputStream
位置,当您稍后尝试阅读它时,由于流位置已移动,因此它不再是有效的zip文件。尝试坚持
fileData.InputStream.Position = 0;
在验证流是有效的zip文件之后,就在您尝试读取它的using
子句之前。这将在开始时重置流位置。