2

我正在尝试使用 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 文件的值匹配

帮助任何人?谢谢

4

1 回答 1

9

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

fileData.InputStream.Position = 0;

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

于 2012-02-07T00:17:21.560 回答