Google cloud storage 如何通过云存储桶编程删除文件夹中的所有内容

Google cloud storage 如何通过云存储桶编程删除文件夹中的所有内容,google-cloud-storage,Google Cloud Storage,我在云存储桶中有一个名为“myfolder”的文件夹。它有a.log、b.log等文件。如何以编程方式从bucket中的文件夹中删除所有这些文件 我需要一些java示例代码来完成这项工作。我从我们的产品代码库中提取了一些代码片段来构建这个示例。请注意使用setPrefix(folder)来过滤存储桶中的内容 因此,逻辑是从bucket中获取所有内容,并根据文件夹名称进行筛选,然后删除它 import java.io.IOException; import com.google.api.clie

我在云存储桶中有一个名为“myfolder”的文件夹。它有a.log、b.log等文件。如何以编程方式从bucket中的文件夹中删除所有这些文件


我需要一些java示例代码来完成这项工作。

我从我们的产品代码库中提取了一些代码片段来构建这个示例。请注意使用
setPrefix(folder)
来过滤存储桶中的内容

因此,逻辑是从bucket中获取所有内容,并根据文件夹名称进行筛选,然后删除它

import java.io.IOException;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.*;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;

import com.google.api.services.storage.Storage;
import com.google.api.services.storage.model.*;

public void deleteFolder(String bucketName, String folder) throws IOException {
    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = new JacksonFactory();
    GoogleCredential.Builder credentialBuilder = new GoogleCredential.Builder();
    final GoogleCredential credential = credentialBuilder
            .setTransport(httpTransport).setJsonFactory(jsonFactory)
            .setServiceAccountId("YourServiceAccountId")
            // .setServiceAccountPrivateKeyFromP12File(new File("PrivateKeyFile"))
            .build();
    Storage storage = new Storage(httpTransport, jsonFactory,
        new HttpRequestInitializer() {
            public void initialize(HttpRequest request)
                    throws IOException {
                credential.initialize(request);
            }
        });
    // PLEASE NOTE THE USAGE OF setPrefix(folder) TO FILTER ITEMS IN FOLDER
    Objects objectsInFolder = storage.objects().list(bucketName).setPrefix(folder).execute();
    for(StorageObject object : objectsInFolder.getItems()) {
        storage.objects().delete(bucketName, object.getName()).execute();
    }
}

我正在做类似的事情,我发现删除一个包含数千个对象的目录非常慢。是否真的没有办法删除文件夹或至少进行批量删除?此外,您可能希望将for循环包装在while循环中,因为api一次只提供1000个对象。