是否可以通过Google Cloud Storage中的一个请求查询多个文件?

时间:2020-09-09 11:18:24

标签: java google-cloud-storage

我有一个函数可以检索存储在Google Cloud Storage中的对象的下载链接。 Java中的实现如下所示:

public String getDownloadLink(String bucketName,
                              String blobName) {
    return storage.signUrl(
            BlobInfo.newBuilder(bucketName, blobName).build(),
            60,
            TimeUnit.MINUTES,
            SignUrlOption.httpMethod(HttpMethod.GET),
            SignUrlOption.withV4Signature()
    ).toString();
}

上述方法将bucketNameblobName作为参数,并返回该对象的下载链接,有效期为60分钟。是否可以使用GCS的Java客户端api获得同一存储桶中多个文件或对象的downloadlink列表,而不必在for循环中调用上述函数?例如,上述方法可能类似于:

public List<String> getDownloadLink(String bucketName,
                              List<String> blobName) {
    // Get the downloadlinks for all the blobName in the list
}

我一直在寻找解决方案,但找不到任何实质性的方法,并且一直在使用for循环来获取多个文件名的下载链接。使用for循环查询多个文件可能会占用大量资源,并且很乏味。真的可以使用一些帮助。

1 个答案:

答案 0 :(得分:1)

根据我对问题的理解,您想返回一个存储桶中多个对象的签名URL列表(有效期为60分钟),而不是直接downloading the files

很明显,如果您要使用任何Cloud Storage客户端库下载这些对象,则可以使用BlobListOption.prefix()来过滤某些文件夹或对象上的查询,如图所示在此example code中。

但是,在检查了Java Cloud Storage客户端库documentation之后,我目前不知道任何基于前缀或方法的Signed URL来访问Cloud Storage API中的对象列表。

由于每个文件或对象都需要单独签名,因此您很可能需要遍历Blob列表。

尽管它不是Java Cloud Storage客户端库,但我发现以下example可以为您提供帮助。