我尝试使用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不存在。"
答案 0 :(得分:0)
如果您查看getBlockBlobReference的API文档,您会看到它获取blob的名称(因此是字符串,而不是URI)。所以,你在这里做的是尝试删除名称是你的blob的完整URI的blob。这些当然不存在。
您要做的只是检查项目的类型并将其投射到blob。然后,您可以执行您想要的任何操作。
if (item instanceof CloudBlob) {
blob = (CloudBlob) item;
}