Создание zip-файла на месте в хранилище BLOB-объектов Azure - PullRequest
6 голосов
/ 21 декабря 2011

У меня есть файлы, хранящиеся в одном контейнере в учетной записи хранения BLOB-объектов.Мне нужно создать zip-файл во втором контейнере, содержащем файлы из первого контейнера.

У меня есть решение, которое работает с использованием рабочей роли и DotNetZip, но, поскольку размер zip-файла может достигать 1 ГБ, яЯ обеспокоен тем, что выполнение всей работы в процессе, использование 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);
    }

}

Может кто-нибудь предложить лучший подход, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 28 января 2012

На момент написания этого вопроса я не знал о параметрах LocalStorage, доступных в Azure. Мне удалось записать файлы по отдельности и работать с ними в LocalStorage, а затем записать их обратно в хранилище BLOB-объектов.

1 голос
/ 27 декабря 2011

Если все, что вас беспокоит, так это то, что ваш memorysteam занимает слишком много памяти, тогда вы можете реализовать свой собственный поток и, когда ваш поток читается, вы добавляете свои zip-файлы в поток и удаляете уже прочитанные файлы из поток. Это позволит сохранить размер вашего потока памяти до размера одного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...