如何在Azure Blob存储中提取多卷存档?

时间:2018-08-14 13:48:57

标签: c# .net azure zip azure-storage

我在Azure Blob存储中存储了一个多卷存档,该存档分为一系列的zip,标题如下:Archive-Name.zip.001,Archive-Name.zip.002等。 。存档名称.zip.010。每个文件为250 MB,包含数百个PDF。

当前,我们正在尝试遍历每个存档部分并提取PDF。除将存档中的过去PDF拆分为两个存档部分之外,其他方法均有效,C#中的ZipFile无法处理拆分的文件并引发异常。

我们尝试将所有存档部分读取到单个MemoryStream中,然后解压缩文件,但是随后发现内存流超过2GB,这是限制-因此该方法也不起作用。

将归档文件下载到机器存储器中,提取,然后将PDF上载到新文件是不可行的。提取需要在运行程序的Azure中完成。

这是我们当前使用的代码-无法处理在两个存档部分之间分割的PDF。

 public static void UnzipTaxForms(TextWriter log, string type, string fiscalYear)
    {
        var folderName = "folderName";
        var outPutContainer = GetContainer("containerName");
        CreateIfNotExists(outPutContainer);
        var fileItems = ListFileItems(folderName);

        fileItems = fileItems.Where(i => i.Name.Contains(".zip")).ToList();

        foreach (var file in fileItems)
        {
            using (var ziped = ZipFile.Read(GetMemoryStreamFromFile(folderName, file.Name)))
            {
                foreach (var zipEntry in ziped)
                {
                    using (var outPutStream = new MemoryStream())
                    {
                        zipEntry.Extract(outPutStream);
                        var blockblob = outPutContainer.GetBlockBlobReference(zipEntry.FileName);
                        outPutStream.Seek(0, SeekOrigin.Begin);
                        blockblob.UploadFromStream(outPutStream);
                    }
                }
            }
        }
    }

另一个说明。我们无法更改多卷存档的生成方式。任何帮助,将不胜感激。

0 个答案:

没有答案