无法使用DotNetZip 1.9从HttpInputStream中读取zip文件

Boj*_* Li 2 c# asp.net dotnetzip asp.net-mvc-3

我正在尝试使用DotNetZip 1.9在Asp.Net MVC 3中读取上传的zip文件.我已经验证我收到的HttpPostedFileBase对象很好.我可以将它保存到磁盘然后解压缩.但是,首先保存到磁盘似乎很浪费,因为我应该能够直接从内存中解压缩.

从MSDN,HttpPostedFileBase.InputStream属性"获取一个Stream对象,该对象指向上传的文件以准备读取文件的内容".

根据DetNetZip的引用,ZipFile.Read()可以接受Stream对象.所以我试了一下,DotNetZip抛出BadReadException.我附加了显示问题的屏幕截图.

从HttpInputStream解压缩的问题 从HttpInputStream解压缩的问题

InputStream的值,Length与上传的zip文件的值相匹配 InputStream的值,Length与上传的zip文件的值相匹配

帮助任何人?谢谢

Dar*_*rov 9

我怀疑ZipFile.IsZipFile方法调用已经提升了您的InputStream位置,当您稍后尝试读取它时,它不再是有效的zip文件,因为流位置已移动.试着坚持一个

fileData.InputStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)

在验证流是有效的zip文件之后,就在using您尝试读取它的子句之前.这将在开始时重置流位置.