在添加 blob 之前是否需要预先创建容器?

时间:2020-12-22 09:37:05

标签: azure azure-functions azure-storage azure-storage-blobs

在 Azure 函数中,我正在保存收到的文件。将根据租户使用不同的容器。

var location = Helper.GetLocation(tenant, uploadId, ...);
using (var outputStream = await binder.BindAsync<Stream>(new BlobAttribute(location , FileAccess.Write)))
{
    await inputStream.CopyToAsync(outputStream);
}

我需要预先创建这些容器吗? (我正在使用 ARM 模板创建一些)。我的测试表明我不必这样做,但我不确定我是否可以依靠它。如果我可以依靠为我创建的容器,我就不必在添加新租户时修改 ARM 模板。

2 个答案:

答案 0 :(得分:1)

是的,您可以为此使用 Binder。我有一个关于 on GitHub 的完整示例。只是相关的部分:

{{1}}

答案 1 :(得分:1)

<块引用>

我需要预先创建这些容器吗? (我正在创建一些使用 ARM 模板)。我的测试表明我没有必要,但我不确定我 可以依靠这个。

我认为您可以信赖这一点。 BlobAttribute 写入操作基于 Microsoft.Azure.WebJobs.Extensions.Storage。此 SDK 有一个名为 CreateIfNotExistsAsync() 的方法。这个方法会检查是否有你想要的特定容器,如果有,它会返回容器对象,如果没有,它会创建一个容器并返回容器对象。

你可以看看这个源代码页面来检查逻辑:

https://github.com/Azure/azure-webjobs-sdk/tree/dev/src/Microsoft.Azure.WebJobs.Extensions.Storage/Blobs

(其实不光是blob属性,Cosmos DB等很多Azure服务也有CreateIfNotExists方法,本意是为了避免麻烦。)