2016-10-28 6 views
1

TL; DR: Можно ли загружать большой MemoryStream в Azure как куски на лету во время запирания?Загрузить Big ZipArchive-MemoryStream to Azure

У меня есть файлы, которые сохраняются в MemoryStream, я добавляю эти файлы в ZipArchive в другой MemoryStream.
Это MemoryStream Я хочу, чтобы загрузить на Azure-BlockBlob-Storage с помощью

blockBlob.UploadFromStream(zipMemoryStream); 

До сих пор так хорошо.
Проблема теперь в том, что Zip-Archive может стать больше, чем 8GB, что является проблемой с MemoryStream.

Можно ли загружать части из потока памяти в виде блоков в лазурь и удалять эти байты из потока?

Или есть лучший подход к работе с zipArchive и лазури?

Для проносясь Я использую класс ZipArchive в пакет System.IO.Compression

С наилучшими пожеланиями,
Flo

+0

Предполагаю, что вы используете Блок Blob? – boades

+0

да, я использую block-blobs :) –

+0

Какой класс вы используете для zipping? Я верю, что знаю, как это решить. Покажите свой код, пожалуйста. – boades

ответ

3

Это может быть не совсем то, что вы ищете, но вы пытаетесь сделать что-то вроде этого :

var blob = container.GetBlockBlobReference("zipped.zip"); 
using (var stream = new ZipArchive(blob.OpenWrite(), ZipArchiveMode.Create)) 
{ 
    var entry = stream.CreateEntry("entry1"); 
    using (var es = entry.Open()) 
    { 
     // Fill entry with data 
    } 

    // Other code 
} 

при вызове OpenWrite из CloudBlockBlob он создает экземпляр CloudBlobStream, который работает в иначе, чем MemoryStream. CloudBlobStream отправляет данные в Azure Storage Service в 4MB кусках, насколько я помню, он не сохраняет old кусков в память.

+0

. Я думаю, что это именно то, что Я ищу, я попробую, и дам вам ответ, но я буду принимать вас, большое спасибо за ваш быстрый ответ –