如何从MemoryStream重新创建Zip文件

时间:2015-06-24 16:55:09

标签: c# azure zip azure-storage-blobs memorystream

我已经四处寻找解决我问题的办法,但似乎没有人想要达到我想要实现的目标。

我的问题是这样,我将Zip文件存储在Azure Blob存储中,现在为了安全起见,我们有一个API2控制器操作来配置这些zip文件,而不是允许直接下载。此操作将检索blob,并将其下载到流中,以便可以将其打包到if(!$stmt->execute()){ trigger_error("there was an error....".$conn->error, E_USER_WARNING); } 中。

但是,当我尝试重新创建zip文件时,我已经知道它已损坏。现在我只是试图让服务器(在localhost上运行)创建zip文件,而最终游戏是让远程客户端应用程序执行此操作(我相当确定我在服务器上的问题的解决方案是相同的

HTTPResponseMessage

我查看了Zip库,看看是否存在将zip流转换回zip文件的解决方案,但我能找到的只是将zip文件读入流,或创建以便提供文件下载而不是文件创建。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

您使用http://jqueryvalidation.org/extension-method/。它的DotNetZip类有一个静态的工厂方法,可以做你想要的:ZipFile作为一个zip文件读取给定的流并返回一个Stream实例(你可以用它做任何事情)

但是,如果您的application/zip包含原始zip数据,而您想要做的就是将其保存到磁盘,那么您应该只能将字节直接写入磁盘。

如果您的邮件文件损坏了,那么#p;错误,我会查看用于将数据发送到Azure的内容编码以及将其发送回的内容编码。您应该将其发送到Azure,其内容类型为application/octet-stream$(document).ready(function() { $('.accordion').click(function(){ if($(this).next('.container').is(':visible')) { $(this).removeClass('show'); $(this).next('.container').slideUp(); } else { $('.accordion').find('.container:visible').slideUp(); $('.accordion').removeClass('show'); $(this).addClass('show'); $(this).next('.container').slideDown(); } }); $('.accordion').on( "touchstart", function(){ if($(this).next('.container').is(':visible')) { $(this).removeClass('show'); $(this).next('.container').slideUp(); } else { $('.accordion').find('.container:visible').slideUp(); $('.accordion').removeClass('show'); $(this).addClass('show'); $(this).next('.container').slideDown(); $('html, body').animate({ scrollTop: $(this).offset().top }, 200); } }); }); ,并且可能会向Azure blob条目添加元数据,以便以相同的方式将其发送出去。

编辑注: DotNetZip曾经住在Codeplex。 Codeplex已关闭。旧档案仍为ZipFile.Read( Stream zipStream )。看起来代码已迁移到Github: