Java Azure存储客户端 - 删除blob

时间:2016-02-29 19:50:33

标签: java azure azure-storage-blobs

我尝试使用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不存在。"

1 个答案:

答案 0 :(得分:0)

如果您查看getBlockBlobReference的API文档,您会看到它获取blob的名称(因此是字符串,而不是URI)。所以,你在这里做的是尝试删除名称是你的blob的完整URI的blob。这些当然不存在。

您要做的只是检查项目的类型并将其投射到blob。然后,您可以执行您想要的任何操作。

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