Java Azure存储客户端-删除Blob

Java Azure存储客户端-删除Blob,java,azure,azure-storage-blobs,Java,Azure,Azure Storage Blobs,如前所述,我正在尝试使用Java删除Azure存储容器中的一些blob。看起来这应该是一件容易的事情,所以我假设我做错了什么,因为下面的代码没有删除任何内容。容器中有4个水滴 String connectionString = String.format( "DefaultEndpointsProtocol=https;" + "AccountName=%s;" + "AccountKey=%s", accountName, accountKey)

如前所述,我正在尝试使用Java删除Azure存储容器中的一些blob。看起来这应该是一件容易的事情,所以我假设我做错了什么,因为下面的代码没有删除任何内容。容器中有4个水滴

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不存在。”

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

您只需检查项目的类型并将其转换为blob。然后你可以做任何你想做的事情

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