AppendBlockAsync-如果不存在则创建Blob

问题描述

我们在使用AppendBlockAsync将数据附加到Blob的分布式环境中有多个并行工作器。每小时应创建一个新的Blob,所有工作人员将开始并行添加到新的Blob。

问题在于何时何地创建Blob。我看不到可以传递给AppendBlockAsync的有效AccessCondition,因此,如果某个blob不存在,它将创建一个并追加到该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.