Ionic Zip 密码设置在 azure blob 存储中,并为 zip 文件夹而不是文件设置最佳压缩

Posted

技术标签:

【中文标题】Ionic Zip 密码设置在 azure blob 存储中,并为 zip 文件夹而不是文件设置最佳压缩【英文标题】:Ionic Zip password set in azure blob storage and set best compression for zip folder not files 【发布时间】:2017-06-01 07:26:17 【问题描述】:

如何设置 zip 文件夹的最佳压缩并为 Zip 文件夹设置密码,我使用的代码很少,请帮助我如何为 zip 文件夹设置最佳压缩和密码。

using (var zipStream = new MemoryStream())                    
 
zipFile.Save(zipStream);
zipStream.Seek(0, SeekOrigin.Begin);                        
CloudBlockBlob cblob = container.GetBlockBlobReference("MockTestZip/MT-" + this.mockExamId + ".zip");
cblob.UploadFromStream(zipStream);                        

我刚刚在其中添加了这两行,但密码未设置在 azure blob 存储的 zip 文件夹中

zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zipFile.Password = "encrypt";

【问题讨论】:

【参考方案1】:

根据您的描述,我利用DotNetZip version 1.10.1 来测试我这边的这个问题。这里是关于ZipFile 中的Password 属性的备注:

在编写 zip 存档时,此密码应用于条目,而不是 zip 存档本身。它适用于随后添加到 ZipFile 的任何 ZipEntry, 使用 AddFile、AddDirectory、AddEntry 或 AddItem 方法等之一。

根据您的情况,我假设您可以将文件存储在没有密码的 zip 文件中,然后将 zip 文件存储在第二个带密码的外部 zip 文件中,如下所示:

using (ZipFile zipFile = new ZipFile())

    zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
    zipFile.Password = "your-password";
    zipFile.AddFile(@"inner.zip",""); //Passing the empty string ("") to store your zip file at the root path within the archive.
    using (var zipStream = new MemoryStream())
    
        zipFile.Save(zipStream);
        zipStream.Seek(0, SeekOrigin.Begin);
        CloudBlockBlob cblob = container.GetBlockBlobReference("MockTestZip/MT-" + this.mockExamId + ".zip");
        cblob.UploadFromStream(zipStream);
    

【讨论】:

以上是关于Ionic Zip 密码设置在 azure blob 存储中,并为 zip 文件夹而不是文件设置最佳压缩的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure 数据工厂对 ZIP 文件进行密码保护

如何通过 Python 中的 Flask 传递内存中的 Azure Blob

使用 Ionic 创建大型多部分 zip 失败并出现 OutOfMemoryException

Azure DevOps 的 Ionic macOS 构建问题

如何使用 c# 以写入模式打开受密码保护的 Zip 文件?

从 azure blob 存储文件生成 Zip 文件