在使用Azure Blob Storage SDK V11时,如果您想要创建一个容器但不确定该容器是否存在,可以使用CreateIfNotExists。
然而,在V12版本中,CreateIfNotExists已不再可用,我能从微软找到的唯一示例是仅创建Container而不检查它是否已经存在。
那么,有人知道在V12中在尝试创建容器之前检查容器是否存在的最佳做法吗?
顺便说一下,我正在开发ASP.Net Core 3.1。
在使用Azure Blob Storage SDK V11时,如果您想要创建一个容器但不确定该容器是否存在,可以使用CreateIfNotExists。
然而,在V12版本中,CreateIfNotExists已不再可用,我能从微软找到的唯一示例是仅创建Container而不检查它是否已经存在。
那么,有人知道在V12中在尝试创建容器之前检查容器是否存在的最佳做法吗?
顺便说一下,我正在开发ASP.Net Core 3.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();
您可以直接创建一个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();
接受的答案是可以的。但我通常使用其异步版本。
var _blobServiceClient = new BlobServiceClient(YOURCONNECTIONSTRING);
var containerClient = _blobServiceClient.GetBlobContainerClient(YOURCONTAINERNAME);
await containerClient.CreateIfNotExistsAsync(Azure.Storage.Blobs.Models.PublicAccessType.BlobContainer);
var connectionString = "UseDevelopmentStorage=true";
var containerClient = new BlobContainerClient(connectionString, containerName);
containerClient.CreateIfNotExists();
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 不存在,但我想先检查容器是否存在。
有人做过这个吗?
GetUriSasToken()
方法中,您指定了一个名为“stock”的容器名称来生成sas_token。那么这个sas_token只能用于该容器“stock”。最好创建一个账户级别的sas_token :)。 - Ivan Glasenberg
new BlobContainerClient(new Uri(".."))
的Uri重载。我没有传递TokenCredential,例如new DefaultAzureCredential()
。错误可能会更有帮助,并提示授权问题而不是404。 - Philbool isExist = container.Exists();
无法编译,因为Exists()
现在不返回bool
,而是返回Response<bool>
。 - O. R. Mapper