1. 概述
Google Cloud Storage (GCS) 提供灵活的在线存储服务,可根据应用需求(如地理位置、访问频率和成本)定制存储方案。与 AWS 不同,GCS 使用统一 API 处理高频、中频和低频访问数据。
✅ 核心优势:
- 统一 API 简化开发
- 免费层可用(定价详情)
- 全球分布式存储
本教程将带你完成:
- 连接 GCS 服务
- 创建存储桶(Bucket)
- 数据的增删改查
- 结合
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 前需配置认证,步骤如下:
- 访问 GCP 控制台
- 若无项目,点击创建(如
baeldung-cloud-tutorial
) - 选择"新建服务账号"
- 填写账号名(如
baeldung-cloud-storage
) - 角色 → Project → Owner
- 点击创建,下载 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
工具(用于命令行操作):
验证安装:
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 的核心操作:
- ✅ 认证配置(JSON 密钥 + 环境变量)
- ✅ Bucket 创建与管理
- ✅ 数据的增删改查
- ✅
gsutil
工具实战
最佳实践建议:
- 优先操作对象而非 Bucket(GCP 对 Bucket 操作有限制)
- 生产环境使用最小权限原则
- 结合
gsutil
进行快速验证
完整代码示例见 GitHub 仓库