【问题标题】: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 个选项可以使用以下选项之一。各位高手能否推荐一下有没有更好的办法?

  1. Java.lang.Runtime.exec()

  2. Java.lang.ProcessBuilder

【问题讨论】:

  • 您可以只使用 GCS Java API。
  • 上述 gsutil 命令是否有完全等价的命令?

标签: 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);
  }
}

【讨论】:

    【解决方案2】:

    如果 1) 您希望存储桶内的 blob(文件)名称保持不变 2) 您有多个 (>100) 文件要复制,最好的方法是使用传输作业。

    这个工作是google用自己的设备做的,从一个bucket到另一个bucket一个一个的复制文件要快很多,因为他们可以和底层的存储对话。

    查看 Google 提供的 java sample code for transfer jobAPI Documentation

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 2017-12-23
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2013-08-13
      • 2018-08-07
      相关资源
      最近更新 更多