c# - 如何在 Azure Blob 存储中提取多卷存档?
问题描述
我有一个存储在 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);
}
}
}
}
}
另一个注意事项。我们无法更改多卷存档的生成方式。任何帮助,将不胜感激。
解决方案
推荐阅读
- php - 如何将链接转换为 seo 友好的链接?
- javascript - 如果其他情况下,如何使用 html/javascript 复选框函数链接 python
- php - ajax 函数 .done 和 .fail,无值返回
- python - 将 SQL 表命名为与 python to_sql() 函数中的 df 名称相同
- javascript - 三.js 创建镜像 VS。钢材对材料的影响?
- c++ - std::span 迭代器可以比创建它们的 span 对象更长寿吗?
- r - 将周数更改为已过去的周数,而不是一年中的周数
- python - 使用函数的 Python HangMan 游戏
- elasticsearch - Elasticsearch COUNT() 文本字段
- powershell - 我可以使用正则表达式通过 CTRL+R 反向搜索来搜索 PowerShell 命令历史记录吗?