【问题标题】:Creating a zip file in situ within azure blob storage在 azure blob 存储中原位创建 zip 文件
【发布时间】:2012-01-25 03:17:54
【问题描述】:

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

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

下面是一些非常精简的代码,展示了工人角色的基本流程:

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);
    }

}

有人可以提出更好的方法吗?

【问题讨论】:

  • 是的,云服务 webrole/workrole 中的内存、CPU 等资源使用情况始终受到关注。值得考虑。 +1

标签: c# azure zip azure-blob-storage dotnetzip


【解决方案1】:

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

【讨论】:

  • 有任何解释/示例的机会吗?这不是真正的答案
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-02-14
    • 2013-09-22
    • 1970-01-01
    • 2015-09-11
    • 2014-12-30
    • 1970-01-01
    • 2018-01-09
    • 2023-01-03
    相关资源
    最近更新 更多