【问题标题】:Java Azure Storage Client - deleting blobsJava Azure 存储客户端 - 删除 blob
【发布时间】:2016-06-13 00:16:58
【问题描述】:

我正在尝试使用 Java Azure Storage Library 4.0.0 删除 Azure 存储容器中的一些 blob,如 here 所述。看起来这应该是一件容易的事,所以我假设我做错了什么,因为下面的代码不会删除任何东西。容器中有 4 个 blob。

String connectionString = String.format(
        "DefaultEndpointsProtocol=https;" +
        "AccountName=%s;" +
        "AccountKey=%s", accountName, accountKey);
CloudStorageAccount account =
        CloudStorageAccount.parse(connectionString);
CloudBlobClient client = account.createCloudBlobClient();
CloudBlobContainer container =
        client.getContainerReference("myContainer");

// This loop iterates 4 times, as expected
for (ListBlobItem item : container.listBlobs("prefix/", true)) {
    CloudBlockBlob blob = container.
            getBlockBlobReference(item.getUri().toString());
    if (blob.deleteIfExists()) {
        // never hits
    }
}

没有抛出异常,但 blob 仍然存在。当我调用 delete() 而不是 deleteIfExists() 时,我得到一个 StorageException:“指定的 blob 不存在。”

【问题讨论】:

    标签: java azure azure-blob-storage


    【解决方案1】:

    如果您查看 getBlockBlobReference 的 API 文档,您会发现它采用了 blob 的名称(因此是字符串,而不是 URI)。因此,您在这里所做的是尝试删除名称为您的 blob 的完整 URI 的 blob。这些当然不存在。

    您要做的只是检查项目的类型并将其转换为 blob。然后你可以做任何你想做的操作。

          if (item instanceof CloudBlob) {
                blob = (CloudBlob) item;
          }
    

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 2020-01-10
      • 2017-09-13
      • 2019-03-21
      • 2016-10-27
      • 1970-01-01
      • 2022-01-07
      • 2021-05-21
      • 2014-11-22
      相关资源
      最近更新 更多