批量删除多个容器中的blob

时间:2017-06-28 22:33:00

标签: c# azure azure-storage azure-storage-blobs

我正在寻找一种从我的存储帐户中删除blob列表的有效方法。将有一个"高数字"删除的blob分布在整个"很多"容器

Azure存储客户端库是否提供了从我的存储帐户中删除List<BlobId>的任何机制?还是我坚持迭代每个blob,找出它的容器,并单独删除?

2 个答案:

答案 0 :(得分:2)

  

Azure存储客户端库是否提供删除的任何机制   从我的存储帐户列出?

可悲的是,Azure Storage Client库只提供Delete Blob功能,一次删除一个blob。

  

或者我坚持迭代每个blob,搞清楚它   容器,并单独删除?

您需要单独删除每个blob。但是,如果您有需要删除的blob的URL,那么您不需要弄清楚容器。使用blob的URL和存储凭据,您可以创建CloudBlob对象的实例,然后调用DeleteIfExistsDeleteIfExistsAsync方法来删除blob。类似的东西:

        var cred = new StorageCredentials(accountName, accountKey);
        var blob = new CloudBlob(new Uri("https://myaccount.blob.core.windows.net/mycontainer/myblob.png"), cred);
        blob.DeleteIfExists();

答案 1 :(得分:1)

接受的答案我不再正确。 现在,您可以使用 Azure 提供的新库,该库名为: 用于 .NET 的 Azure 存储 Blob 批处理客户端库

当然还有一个 Java 库。

<块引用>

Azure Blob 存储是 Microsoft 的云对象存储解决方案。 Blob 存储针对存储大量非结构化数据进行了优化。此库允许您在单个请求中批处理多个 Azure Blob 存储操作。

docs.microsoft/azure/storage.blobs.batch-readme

代码示例:

// Get a connection string to our Azure Storage account.
string connectionString = "<connection_string>";
string containerName = "sample-container";

// Get a reference to a container named "sample-container" and then create it
BlobServiceClient service = new BlobServiceClient(connectionString);
BlobContainerClient container = service.GetBlobContainerClient(containerName);
container.Create();

// Create a blob named "valid"
BlobClient valid = container.GetBlobClient("valid");
valid.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Valid!")));

// Get a reference to a blob named "invalid", but never create it
BlobClient invalid = container.GetBlobClient("invalid");

// Delete both blobs at the same time
BlobBatchClient batch = service.GetBlobBatchClient();
try
{
    batch.DeleteBlobs(new Uri[] { valid.Uri, invalid.Uri });
}
catch (AggregateException)
{
    // An aggregate exception is thrown for all the individual failures
    // Check ex.InnerExceptions for RequestFailedException instances
}