在azure blob存储中原位创建zip文件

本文关键字:创建 zip 文件 azure blob 存储 | 更新日期: 2023-09-27 18:18:24

我将文件存储在blob存储帐户中的一个容器中。我需要在第二个容器中创建一个zip文件,其中包含来自第一个容器的文件。

我有一个解决方案,使用工作者角色和DotNetZip工作,但因为zip文件最终可能是1GB的大小,我担心做所有的工作在进程中,使用MemoryStream对象等不是最好的方法。我最担心的是内存使用和释放资源,因为这个过程可能一天发生几次。

下面是一些非常的代码,显示了worker角色中的基本过程:

using (ZipFile zipFile = new ZipFile())
{
    foreach (var uri in uriCollection)
    {
        var blob = new CloudBlob(uri);
        byte[] fileBytes = blob.DownloadByteArray();
        using (var fileStream = new MemoryStream(fileBytes))
        {
            fileStream.Seek(0, SeekOrigin.Begin);
            byte[] bytes = CryptoHelp.EncryptAsBytes(fileStream, "password", null);
            zipFile.AddEntry("entry name", bytes);
        }
    }
    using (var zipStream = new MemoryStream())
    {
        zipFile.Save(zipStream);
        zipStream.Seek(0, SeekOrigin.Begin);
        var blobRef = ContainerDirectory.GetBlobReference("output uri");
        blobRef.UploadFromStream(zipStream);
    }
}
谁能建议一个更好的方法?

在azure blob存储中原位创建zip文件

在写这个问题的时候,我不知道Azure中可用的LocalStorage选项。我能够单独编写文件,并在LocalStorage中使用它们,然后将它们写回blob存储。

如果你担心的是你的memorysteam占用了太多的内存,那么你可以做的就是实现你自己的流,当你的流被读取时,你可以将你的zip文件添加到流中,并从流中删除已经读取的文件。这将保持内存流大小为一个文件的大小。