我正在使用 Azure Functions(v2) 和 Blob 存储。 我想从许多 blob 文件生成 zip。
blob文件很大,大小达到Functions的Threshold内存。
我使用 System.IO.Compression.ZipArchive 并引用 How to zip huge files in a blob using stream
使用 (var blobStream = wait archiveBlob.OpenWriteAsync())
使用 (var resultArchive = new ZipArchive(blobStream, ZipArchiveMode.Create, true))
....
但接下来,我在 5 分钟内达到了阈值。 所以我尝试拆分功能并逐渐将文件添加到Zip,但ZipArchive出现异常。
using (var resultArchive = new ZipArchive(blobStream, ZipArchiveMode.Update, true))
--> Microsoft.Azure.WebJobs.FunctionFailedException
“更新模式需要具有读取、写入和查找功能的流。”
- 可以通过读写功能打开 BlockBlob 吗?
- 或者还有其他想法?
谢谢。
最佳答案
我也遇到了同样的问题。由于没有人回答任何能让您更接近解决方案的问题,我将告诉您我在缓解问题方面的经验。 您有 2 种可能的解决方案
将文件拆分为多个压缩文件(可以选择将那些已压缩的文件最后压缩为一个)。您可以在此处使用 Azure Durable Functions 实现并发。
将压缩过程移至 Azure WebJob。与 Azure Functions 不同,Azure WebJobs 没有 Azure Functions 那样严格的时间限制,它们是专门为此类长时间运行的任务而设计的。 您可以从 Azure Function 或 Web api 触发 WebJob。
关于c# - 如何在 Azure Functions 中追加 ZipArchive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149489/