【问题标题】:Google Cloud Storage - How to access folders and files like static resources inside bucket - Spring BootGoogle Cloud Storage - 如何访问存储桶内的静态资源等文件夹和文件 - Spring Boot
【发布时间】:2021-09-23 16:35:31
【问题描述】:

我想将 Google Cloud Storage 用于所有静态资源 - 图片等

示例是注入 1 个文件,但我想访问许多文件 - 给定一个名称

@Value("gs://${gcs-resource-test-bucket}/hello.txt")
private Resource gcsFile;

我也对迭代不感兴趣 - 因为我在存储桶中有文件夹,并且不想每次都迭代所有 100 个左右的文件

Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
Page<Blob> blobs = storage.list(bucketName);

for (Blob blob : blobs.iterateAll()) {
  System.out.println(blob.getName());
}

有没有办法访问像 gs://somestringfilename 这样的文件?

不知道如何使用这个属性来访问文件

You can also serve static resources by reading them from a bucket.
 spring.web.resources.static-locations=gs://p*

假设我有一个 rest 控制器来提供文件名,我如何从云存储中获取文件?

【问题讨论】:

  • 你的资源是公开的吗?
  • 不公开。应用程序正在读取,因此假设它是服务帐户。问题不是权限,而是如何按名称访问文件
  • 尝试 - 页面 blobs = storage().list( bucketName, Storage.BlobListOption.prefix(directoryPrefix));看起来不错,但现在需要阅读内容

标签: spring-boot google-cloud-platform google-cloud-storage


【解决方案1】:

我用 bean 解决了这个问题

StorageOptions.newBuilder().setProjectId(projectId).build().getService();

一个函数

私人页面文件夹(字符串目录前缀){

Page<Blob> blobs =
        storage().list(
            bucketName,
            Storage.BlobListOption.prefix(directoryPrefix));

return blobs;       

}

用法:directotyPrefix 不只是我的文件夹,也是粘贴文件名

我的文件夹/ + 文件名和扩展名

【讨论】:

    【解决方案2】:

    根据给定的陈述,您正在尝试使用 Java 作为您的语言从 Google Cloud Storage 读取或访问文件。

    对于您的情况,这应该可行:

    BlobId blobId = BlobId.of(bucketName, blobName);
    Blob blob = storage.get(blobId);
    String fileContent = new String(blob.getContent());
    System.out.println(fileContent);
    

    关于Class Blob的更多文档,您可以参考here

    您也可以查看Cloud Storage Client Libraries 了解更多详情。

    【讨论】:

    • 我找到了答案,也会发布我的答案。会尝试这个,因为它与我的解决方案不同
    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 2019-12-03
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2017-10-16
    • 2014-11-21
    相关资源
    最近更新 更多