我正在尝试删除代码中的存储桶,仅当存储桶为空时它才有效。 我的删除代码是
com.google.api.services.storage.Storage.Buckets.Delete delete = storage.buckets().delete(bucketName);
delete.execute();
如果存储桶不为空,则会收到异常错误消息,指出存储桶不为空 我试图在文档here
中找到一个没有成功的解决方案我认为我可以获取存储桶内容的对象列表,然后开始删除它们,但我找不到此API。
答案 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));
}