我在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);
}
}
}
}
}
另一个说明。我们无法更改多卷存档的生成方式。任何帮助,将不胜感激。