【发布时间】:2021-10-20 19:57:01
【问题描述】:
我的这个概念证明的工作流程是:
- Azure Function App 检测到 Blob 存储中的 .zip 文件 (
Stream inputBlob) - 函数应用调用我的代码,需要提取文件并将它们单独保存到 Blob 存储容器
Stream outputBlob
代码确实从inputBlob 获取了.zip,我可以在调试器中看到ZipArchive 包含.zip 的内容。但是没有文件输出,没有错误。我需要做什么才能将所有文件保存到outputBlob 流?我确定我遗漏了与流复制相关的内容。
[FunctionName("Name")]
public static void Run(
[BlobTrigger("input/{name}", Connection = "AzureWebJobsStorage")]Stream inputBlob,
[Blob("output/{name}", FileAccess.Write)] Stream outputBlob,
string name, ILogger log)
{
try
{
using var zip = new ZipArchive(inputBlob);
foreach (var item in zip.Entries)
{
using var stream = item.Open();
stream.CopyTo(outputBlob);
stream.Close();
}
outputBlob.Seek(0, SeekOrigin.Begin);
outputBlob.Close();
}
catch (Exception ex)
{
log.Log(LogLevel.Error, $"Error at {name}: {ex.Message}");
throw;
}
}
【问题讨论】:
-
旁注:将 ZIP 存档的内容转储到单个文件中(连接流甚至不注意顺序)似乎是一种奇怪的操作......也很不清楚你对
Seek的期望 -可能需要为该行添加解释。 -
@AlexeiLevenkov 也许我用错了,我不希望将 zip 的内容放在一个文件中。
outputBlob是一个 Azure Blob 存储位置,我希望将所有文件解压缩到该位置。搜索是从另一个类似功能复制粘贴,我实际上不知道我是否需要它。
标签: c# azure-functions zip filestream