TL;DR:是否可以在压缩时将大型 MemoryStream 作为 block 动态上传到 Azure?
我有一些文件保存到 MemoryStream
中,我将这些文件添加到另一个 MemoryStream 中的 ZipArchive
中。
我想使用此 MemoryStream 上传到 Azure-BlockBlob-Storage
blockBlob.UploadFromStream(zipMemoryStream);
到目前为止一切顺利。
现在的问题是,Zip-Archive 可能会变得大于 8GB,这是 MemoryStream 的问题。
是否可以将内存流中的部分作为 block 上传到 azure,并从流中删除这些字节?
或者是否有更好的方法来处理 zipArchive 和 azure?
对于压缩,我使用包 System.IO.Compression
中的类 ZipArchive
最诚挚的问候,
弗洛
这可能不完全是您正在寻找的内容,但您是否尝试过这样做:
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
}
当您调用 CloudBlockBlob
的 OpenWrite
时,它会创建一个 CloudBlobStream
实例,其工作方式与 MemoryStream
不同>。 CloudBlobStream 以 4MB block 的形式将数据发送到 Azure 存储服务,据我所知,它不会将旧 block 保存到内存中。
我是一名优秀的程序员,十分优秀!