将Big ZipArchive-MemoryStream上传到Azure

时间:2016-10-28 09:36:20

标签: c# azure stream zip memorystream

TL; DR :是否可以在压缩时动态地将大型MemoryStream上传到Azure?

我有保存到MemoryStream的文件,我将这些文件添加到另一个MemoryStream中的ZipArchive
我要使用

将此MemoryStream上传到Azure-BlockBlob-Storage
blockBlob.UploadFromStream(zipMemoryStream);

到目前为止一切顺利 现在的问题是,Zip-Archive可能会变得更大,然后 8GB ,这是MemoryStream的一个问题。

是否可以将内存流中的部分作为块上传到azure,并从Stream中删除这些字节?

或者有更好的方法来处理zipArchive和azure吗?

对于压缩,我使用了包ZipArchive

中的课程System.IO.Compression

最诚挚的问候,
FLO

1 个答案:

答案 0 :(得分: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以4MB的方式将数据发送到Azure存储服务,据我所知,它不会将old个块保存到内存中。