Java - 如何删除 google 云中的非空存储桶?
Java - how do I delete a non-empty buckets in google cloud?
我正在尝试删除我的代码中的存储桶,但它仅在存储桶为空时有效。
我的删除码是
com.google.api.services.storage.Storage.Buckets.Delete delete = storage.buckets().delete(bucketName);
delete.execute();
如果桶不为空,我会收到异常和错误消息,说明桶不为空
我试图在文档中找到一个没有成功的解决方案 here
我以为我可以获得存储桶内容的对象列表,然后开始删除它们,但我找不到这个 API。
您可以使用 com.google.api.services.storage.Storage.Objects.List
列出存储桶中的对象。
谢谢,终于找到了解决方案:
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();
}
由于 Google 云存储 API 发生了相当大的变化,上述解决方案并不适用于所有设置(例如,您在 Maven 项目中并且您只有权访问 com.google.cloud.storage.*
命名空间。)
所以,我的解决方案是two-fold:(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));
}
我正在尝试删除我的代码中的存储桶,但它仅在存储桶为空时有效。 我的删除码是
com.google.api.services.storage.Storage.Buckets.Delete delete = storage.buckets().delete(bucketName);
delete.execute();
如果桶不为空,我会收到异常和错误消息,说明桶不为空 我试图在文档中找到一个没有成功的解决方案 here
我以为我可以获得存储桶内容的对象列表,然后开始删除它们,但我找不到这个 API。
您可以使用 com.google.api.services.storage.Storage.Objects.List
列出存储桶中的对象。
谢谢,终于找到了解决方案:
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();
}
由于 Google 云存储 API 发生了相当大的变化,上述解决方案并不适用于所有设置(例如,您在 Maven 项目中并且您只有权访问 com.google.cloud.storage.*
命名空间。)
所以,我的解决方案是two-fold:(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));
}