【问题标题】:Copy between two Google Cloud Storage buckets using Java使用 Java 在两个 Google Cloud Storage 存储分区之间复制
【发布时间】:2021-01-08 12:50:11
【问题描述】:
要在两个 Google Cloud Storage 存储桶之间复制,需要等效于 Java SDK 中的以下命令
gsutil cp gs://bucket-name/filename gs://bucket-name
我有 2 个选项可以使用以下选项之一。各位高手能否推荐一下有没有更好的办法?
-
Java.lang.Runtime.exec()
-
Java.lang.ProcessBuilder
【问题讨论】:
标签:
java
google-cloud-platform
google-cloud-storage
【解决方案1】:
正如documentation 中提到的,您可以使用 Java 客户端库在存储桶之间复制对象作为命令的直接替代方法
gsutil cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/NAME_OF_COPY
这是示例代码,您可以从github查看和下载完整的示例项目,请查看readme file以了解需要哪些依赖项
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
public class CopyObject {
public static void copyObject(
String projectId, String sourceBucketName, String objectName, String targetBucketName) {
// The ID of your GCP project
// String projectId = "your-project-id";
// The ID of the bucket the original object is in
// String sourceBucketName = "your-source-bucket";
// The ID of the GCS object to copy
// String objectName = "your-object-name";
// The ID of the bucket to copy the object to
// String targetBucketName = "target-object-bucket"
Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
Blob blob = storage.get(sourceBucketName, objectName);
// This keeps the original name, you could also do
// copyTo(targetBucketName, "target-object-name") to change the name
blob.copyTo(targetBucketName);
System.out.println(
"Copied object "
+ objectName
+ " from bucket "
+ sourceBucketName
+ " to "
+ targetBucketName);
}
}