如何检查Azure Blob存储V12中是否存在容器

时间:2020-04-09 19:28:36

标签: azure asp.net-core azure-storage azure-storage-blobs azure-blob-storage

以前,在使用Azure Blob存储SDK V11时,如果要创建一个容器,但是不确定该容器是否存在,则可以使用CreateIfNotExists。

但是在V12版本中,CreateIfNotExists不再可用,我可以从Microsoft找到的唯一示例是简单地创建一个Container而不检查它是否已经存在。

因此,有谁知道V12中的最佳做法,即在尝试创建容器之前先检查容器是否存在。

顺便说一句,我正在为ASP.Net Core 3.1开发。

4 个答案:

答案 0 :(得分:6)

在v12中,有两种方法可以检查容器是否存在。

1。

        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

        //get a BlobContainerClient
        var container = blobServiceClient.GetBlobContainerClient("the container name");

        //you can check if the container exists or not, then determine to create it or not
        bool isExist = container.Exists();
        if (!isExist)
        {
            container.Create();
        }

        //or you can directly use this method to create a container if it does not exist.
        container.CreateIfNotExists();

2。

您可以直接创建一个BlobContainerClient,然后使用以下代码:

            //create a BlobContainerClient 
            BlobContainerClient blobContainer = new BlobContainerClient("storage connection string", "the container name");

            //use code below to check if the container exists, then determine to create it or not
            bool isExists = blobContainer.Exists();
            if (!isExist)
            {
               blobContainer .Create();
            }

            //or use this code to create the container directly, if it does not exist.
            blobContainer.CreateIfNotExists();

答案 1 :(得分:0)

但是在V12版本中,CreateIfNotExists不再可用,并且 我可以从Microsoft找到的唯一示例就是简单地创建一个 无需检查容器是否已存在的容器。

我不确定您为什么说CreateIfNotExists is no longer available in version 12 of storage client library。它肯定在BlobContainerClient类中。这是直接链接:CreateIfNotExists

    var connectionString = "UseDevelopmentStorage=true";            
    var containerClient = new BlobContainerClient(connectionString, containerName);
    containerClient.CreateIfNotExists();

答案 2 :(得分:0)

接受的答案很好。但是我通常使用它的异步版本。

var _blobServiceClient = new BlobServiceClient(YOURCONNECTIONSTRING);
var containerClient = _blobServiceClient.GetBlobContainerClient(YOURCONTAINERNAME);
await containerClient.CreateIfNotExistsAsync(Azure.Storage.Blobs.Models.PublicAccessType.BlobContainer);

我使用的版本是Azure.Storage.Blobs v12.4.1

答案 3 :(得分:-1)

我有以下方法来获取 SAS 令牌,一切正常。

private Uri GetUriSasToken()
    {
        string storedPolicyName = null;
        string connectionString = _config.GetConnectionString("BlobConnection");
        BlobContainerClient containerClient = new BlobContainerClient(connectionString, "stock");

        // Check whether this BlobContainerClient object has been authorized with Shared Key.
        if (containerClient.CanGenerateSasUri)
        {
            // Create a SAS token that's valid for one hour.
            BlobSasBuilder sasBuilder = new BlobSasBuilder()
            {
                BlobContainerName = containerClient.Name,
                Resource = "c"
            };

            if (storedPolicyName == null)
            {
                sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
                sasBuilder.SetPermissions(BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
            }
            else
            {
                sasBuilder.Identifier = storedPolicyName;
            }

            Uri sasUri = containerClient.GenerateSasUri(sasBuilder);
            return sasUri;
        }
        else
        {
            _logger.LogError(@"BlobContainerClient must be authorized with Shared Key credentials to create a service SAS.");
            return null;
        }
                 
    }

然后,我使用以下代码调用上述方法:

   BlobServiceClient blobServiceClient = new BlobServiceClient(GetUriSasToken(), null);
        var blobName = _config.GetValue<string>("BlobName");
        var containerName = _config.GetValue<string>("ContainerName");            
        var fileName = _config.GetValue<string>("FileName");            
        var containerClient = blobServiceClient.GetBlobContainerClient(containerName);

有什么方法可以验证容器是否存在?

我不确定我能做到:

containerClient.Exists

我使用了它,但它返回 Blob 不存在的错误,但我想先检查容器是否存在。

有人做过吗?