以前,在使用Azure Blob存储SDK V11时,如果要创建一个容器,但是不确定该容器是否存在,则可以使用CreateIfNotExists。
但是在V12版本中,CreateIfNotExists不再可用,我可以从Microsoft找到的唯一示例是简单地创建一个Container而不检查它是否已经存在。
因此,有谁知道V12中的最佳做法,即在尝试创建容器之前先检查容器是否存在。
顺便说一句,我正在为ASP.Net Core 3.1开发。
答案 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 不存在的错误,但我想先检查容器是否存在。
有人做过吗?