Java - 如何删除谷歌云中的非空桶?

时间:2016-08-22 09:12:39

标签: java google-cloud-storage

我正在尝试删除代码中的存储桶,仅当存储桶为空时它才有效。 我的删除代码是

com.google.api.services.storage.Storage.Buckets.Delete delete = storage.buckets().delete(bucketName);
        delete.execute();

如果存储桶不为空,则会收到异常错误消息,指出存储桶不为空 我试图在文档here

中找到一个没有成功的解决方案

我认为我可以获取存储桶内容的对象列表,然后开始删除它们,但我找不到此API。

3 个答案:

答案 0 :(得分:3)

您可以使用com.google.api.services.storage.Storage.Objects.List列出存储桶中的对象。

答案 1 :(得分:0)

谢谢,最后我找到了解决方案:

 List<StorageObject> storageObjects = new ArrayList();
    torage.Objects.List listObjects = storage.objects().list(bucket);
    Objects objects = listObjects.execute();
    storageObjects.addAll(objects.getItems());
    for (StorageObject storageObject : workBucketObjects) {
           Storage.Objects.Delete delete = storage.objects().delete(bucketName,storageObject.getName());
           delete.execute();

}

答案 2 :(得分:0)

由于Google云端存储API已经发生了相当大的变化,上述解决方案无法适用于所有设置(例如,您在Maven项目中,并且只能访问com.google.cloud.storage.*命名空间。)

所以,我的解决方案有两个方面:(1)迭代所有文件(2)递归删除所有文件(3)删除桶本身。

import com.google.cloud.storage.*;

private static void deleteGcsBucket(String projectId, String gcsBucketName) {
  StorageOptions.Builder optionsBuilder = StorageOptions.newBuilder();
  StorageOptions storageOptions = optionsBuilder.setProjectId(projectId).build();
  Storage storage = storageOptions.getService();

  Iterable<Blob> blobs = storage.list(gcsBucketName, 
      Storage.BlobListOption.prefix("")).iterateAll();
  for (Blob blob : blobs) {
    blob.delete(Blob.BlobSourceOption.generationMatch());
  }

  storage.delete(gcsBucketName, 
      Storage.BucketSourceOption.userProject(projectId));
}