1. 概述

Google Cloud Storage (GCS) 提供灵活的在线存储服务,可根据应用需求(如地理位置、访问频率和成本)定制存储方案。与 AWS 不同,GCS 使用统一 API 处理高频、中频和低频访问数据。

核心优势

  • 统一 API 简化开发
  • 免费层可用(定价详情
  • 全球分布式存储

本教程将带你完成:

  1. 连接 GCS 服务
  2. 创建存储桶(Bucket)
  3. 数据的增删改查
  4. 结合 gsutil 工具实战操作

⚠️ 面向有经验的 Java 开发者,基础概念(如 Maven 配置)将快速带过

2. Google Cloud Storage 设置

2.1 Maven 依赖

只需添加一个依赖到 pom.xml

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
    <version>1.17.0</version>
</dependency>

最新版本可在 Maven Central 获取

2.2 创建认证密钥

连接 GCP 前需配置认证,步骤如下:

  1. 访问 GCP 控制台
  2. 若无项目,点击创建(如 baeldung-cloud-tutorial
  3. 选择"新建服务账号"
  4. 填写账号名(如 baeldung-cloud-storage
  5. 角色 → Project → Owner
  6. 点击创建,下载 JSON 密钥文件

⚠️ 生产环境应按需分配最小权限角色,此处为演示使用 Owner 权限

2.3 安装认证密钥

将下载的 JSON 文件保存到安全位置,并设置环境变量:

Linux/Mac:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json"

Windows:

set GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\keyfile.json"

2.4 安装云工具

安装 gsutil 工具(用于命令行操作):

  1. 安装 Cloud SDK
  2. 执行 快速初始化,选择 2.2 步骤创建的项目

验证安装:

gsutil version

3. 连接 Storage 并创建 Bucket

3.1 连接 Storage

方式一:使用环境变量(推荐)

Storage storage = StorageOptions.getDefaultInstance().getService();

方式二:显式指定密钥文件

Credentials credentials = GoogleCredentials
  .fromStream(new FileInputStream("/path/to/keyfile.json"));
Storage storage = StorageOptions.newBuilder()
  .setCredentials(credentials)
  .setProjectId("baeldung-cloud-tutorial")
  .build()
  .getService();

3.2 创建 Bucket

Bucket 是存储对象的容器,创建方式:

Bucket bucket = storage.create(BucketInfo.of("baeldung-bucket"));

⚠️ 踩坑提醒:Bucket 名称必须全局唯一!若名称已被占用,create() 会抛出异常

3.3 用 gsutil 检查 Bucket

查看 Bucket 详细信息:

gsutil ls -L -b gs://baeldung-bucket/

输出示例:

gs://baeldung-bucket/ :
    Storage class:            STANDARD
    Location constraint:        US
    Versioning enabled:        None
    Time created:            Sun, 11 Feb 2018 21:09:15 GMT
    ACL:
      [
        {
          "entity": "project-owners-385323156907",
          "projectTeam": {
            "projectNumber": "385323156907",
            "team": "owners"
          },
          "role": "OWNER"
        }
      ]

4. 数据读写操作

4.1 写入数据

GCS 中数据以 Blob 形式存储,写入字符串示例:

String value = "Hello, World!";
byte[] bytes = value.getBytes(UTF_8);
Blob blob = bucket.create("my-first-blob", bytes);

4.2 用 gsutil 读取数据

列出 Bucket 内容:

gsutil ls gs://baeldung-bucket/
# 输出: gs://baeldung-bucket/my-first-blob

查看对象内容:

gsutil cat gs://baeldung-bucket/my-first-blob
# 输出: Hello, World!

4.3 Java 读取数据

通过 BlobId 读取(推荐)

BlobId blobId = BlobId.of("baeldung-bucket", "my-first-blob");
Blob blob = storage.get(blobId);
String value = new String(blob.getContent());

遍历 Bucket 查找

Page<Blob> blobs = bucket.list();
for (Blob blob : blobs.getValues()) {
    if ("my-first-blob".equals(blob.getName())) {
        return new String(blob.getContent());
    }
}

4.4 更新数据

通过 WritableByteChannel 更新内容:

String newString = "Bye now!";
Blob blob = storage.get(blobId);
try (WritableByteChannel channel = blob.writer()) {
    channel.write(ByteBuffer.wrap(newString.getBytes(UTF_8)));
}

验证更新:

gsutil cat gs://baeldung-bucket/my-first-blob
# 输出: Bye now!

4.5 保存到本地并删除

下载到本地

gsutil copy gs://baeldung-bucket/my-first-blob ./local-file.txt

删除对象

gsutil rm gs://baeldung-bucket/my-first-blob

5. 总结

本教程完成了 GCS 的核心操作:

  1. ✅ 认证配置(JSON 密钥 + 环境变量)
  2. ✅ Bucket 创建与管理
  3. ✅ 数据的增删改查
  4. gsutil 工具实战

最佳实践建议

  • 优先操作对象而非 Bucket(GCP 对 Bucket 操作有限制)
  • 生产环境使用最小权限原则
  • 结合 gsutil 进行快速验证

完整代码示例见 GitHub 仓库


原始标题:Intro to Google Cloud Storage with Java