2016-02-29 54 views
0

我想删除使用Java Azure Storage Library 4.0.0的Azure存储容器一些斑点,为解释here。看起来这应该是一件容易的事,所以我认为我做错了什么,如下面的代码不会删除任何东西。容器中有4个blob。的Java Azure存储客户端 - 删除斑点

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

回答

0

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

你想要做的只是检查物品的类型并将其投射到一个blob。然后你可以做任何你想做的事情。

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