【问题标题】:AppendBlockAsync - Create Blob if not existsAppendBlockAsync - 如果不存在则创建 Blob
【发布时间】:2020-12-08 09:19:15
【问题描述】:
我们在分布式环境中有多个并行工作器,它们使用 AppendBlockAsync 将数据附加到 blob。每小时应该创建一个新的 blob,所有工作人员将开始并行追加到新的 blob。
问题在于何时何地创建 blob。我没有看到可以传递给 AppendBlockAsync 的有效 AccessCondition,这样如果 blob 不存在,它会创建一个并附加到它。
今天,我们将异常捕获到 AppendBlockAsync 并根据异常类型创建 blob(如果它不存在)。但是从客户(工人)那里做这件事似乎是不对的。服务器(Azure 存储帐户)应该有办法处理这个问题。
【问题讨论】:
标签:
.net
azure
azure-storage
【解决方案1】:
你应该在客户端处理它。
例如,使用.Exists() 方法来检查文件是否存在。如果不存在,只需创建文件即可。
示例代码如下所示:
//your other code
var client = storageAccount.CreateCloudBlobClient();
var container = client.GetContainerReference("xxx");
var blobclient = container.GetAppendBlobReference("xx");
if (!blobclient.Exists())
{
try
{
blobclient.CreateOrReplace(AccessCondition.GenerateIfNotExistsCondition(), null, null);
}
catch (StorageException)
{ }
}
await blobclient.AppendBlockAsync(xxx);
//other code.