在azure blob存储中原位创建zip文件
本文关键字:创建 zip 文件 azure blob 存储 | 更新日期: 2023-09-27 18:18:24
我将文件存储在blob存储帐户中的一个容器中。我需要在第二个容器中创建一个zip文件,其中包含来自第一个容器的文件。
我有一个解决方案,使用工作者角色和DotNetZip工作,但因为zip文件最终可能是1GB的大小,我担心做所有的工作在进程中,使用MemoryStream
对象等不是最好的方法。我最担心的是内存使用和释放资源,因为这个过程可能一天发生几次。
下面是一些非常的代码,显示了worker角色中的基本过程:
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);
}
}
谁能建议一个更好的方法?
在写这个问题的时候,我不知道Azure中可用的LocalStorage选项。我能够单独编写文件,并在LocalStorage中使用它们,然后将它们写回blob存储。
如果你担心的是你的memorysteam占用了太多的内存,那么你可以做的就是实现你自己的流,当你的流被读取时,你可以将你的zip文件添加到流中,并从流中删除已经读取的文件。这将保持内存流大小为一个文件的大小。