AppendBlockAsync - 如果不存在则创建 Blob
AppendBlockAsync - Create Blob if not exists
我们在使用 AppendBlockAsync 将数据附加到 blob 的分布式环境中有多个并行工作器。每小时应该创建一个新的 blob,所有工作人员将开始并行地附加到新的 blob。
问题是何时何地创建 blob。我没有看到可以传递给 AppendBlockAsync 的有效 AccessCondition,这样如果 blob 不存在,它会创建一个并附加到它。
今天,我们正在捕获 AppendBlockAsync 的异常,并根据异常类型创建 blob(如果它不存在)。但是从客户(工人)那里做似乎不对。服务器(Azure 存储帐户)应该有办法处理这个问题。
你应该在客户端处理。
例如使用.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.
我们在使用 AppendBlockAsync 将数据附加到 blob 的分布式环境中有多个并行工作器。每小时应该创建一个新的 blob,所有工作人员将开始并行地附加到新的 blob。
问题是何时何地创建 blob。我没有看到可以传递给 AppendBlockAsync 的有效 AccessCondition,这样如果 blob 不存在,它会创建一个并附加到它。
今天,我们正在捕获 AppendBlockAsync 的异常,并根据异常类型创建 blob(如果它不存在)。但是从客户(工人)那里做似乎不对。服务器(Azure 存储帐户)应该有办法处理这个问题。
你应该在客户端处理。
例如使用.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.