【问题标题】:Bulk delete blobs across multiple containers跨多个容器批量删除 blob
【发布时间】:2017-06-28 22:33:00
【问题描述】:

我正在寻找一种从我的存储帐户中删除 Blob 列表的有效方法。将有“大量”要删除的 blob 分布在“许多”容器中。

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

【问题讨论】:

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


    【解决方案1】:

    更新 - 2012-05-25

    这个答案现在已经过时了。请参阅下面 Ester Kaufment 的回答。您现在可以批量删除 Blob。


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

    遗憾的是,没有。Azure 存储客户端库只是为您提供 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();
    

    【讨论】:

    • 接受的答案不再正确。我在下面添加了一个答案。现在您可以使用 Azure 提供的新库,名为:“Azure.Storage.Blobs.Batch”。
    【解决方案2】:

    接受的答案我不再正确。 现在,您可以使用 Azure 提供的新库,名为: 适用于 .NET 的 Azure Storage Blobs Batch 客户端库

    当然,还有一个 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
    }
    

    【讨论】:

    • 谢谢!我已更新我的答案,将其标记为“过时”。
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2021-02-19
    • 2019-08-26
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多