我有一项服务,可以将blob从一个存储转换并传输到另一个存储。
blob可以是gzip
'或原始数据。
由于gzip
框架.NET
类的限制,我在单个gzip
'ed blob中不允许多个成员。< / p>
我的目标是拒绝gzip
中包含两个或更多 memebers 的O(1)
个ed blob。
O(1)
我的意思是不读完整个blob或它的大部分内容。
我已经阅读了RFC,我有一种感觉:
blob的大小
最后成员的ISIZE
页脚
我们可以通过一些方法来确保假阳性的可能性非常低(即拒绝单个 memeber blob)和假阴性(即允许多个成员 blob)blob是单成员或多成员gzip。
有没有人成功处理过这个问题? 感谢
答案 0 :(得分:0)
我们可以使用内存流获取zip文件计数而无需将zip文件下载到本地目录。以下是我的测试示例演示,它适用于我。有关如何使用SDK操作Azure blob的更多详细信息,请参阅document。从系统dll添加System.IO.Compression.dll
。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("You connection string");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("testcont"); //your container name
CloudBlockBlob blockBlob = container.GetBlockBlobReference("test.zip"); //blob name
using (var memoryStream = new MemoryStream())
{
blockBlob.DownloadToStream(memoryStream);
using (ZipArchive zip = new ZipArchive(memoryStream))
{
var count = zip.Entries.Count;
}
// Todo list we can use CloudBlockBlob.StartCopy to copy blob to another storage
}
有关CloudBlockBlob.StartCopy的更多信息,请参阅document。
SDK信息请参考packages.config文件。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net452" />
<package id="Microsoft.Data.Edm" version="5.7.0" targetFramework="net452" />
<package id="Microsoft.Data.OData" version="5.7.0" targetFramework="net452" />
<package id="Microsoft.Data.Services.Client" version="5.7.0" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
<package id="System.Spatial" version="5.7.0" targetFramework="net452" />
<package id="WindowsAzure.Storage" version="8.0.1" targetFramework="net452" />
</packages>