如何使用 Java API 在一次调用中将多个文件上传到 Google Cloud Storage?

Ram*_*a.C 6 java rest google-cloud-storage google-cloud-platform

我们想要将多个文件上传到 Google Cloud Storage。目前,我们正在使用 Google Java API 进行一一上传。代码如下:

public void uploadFile(File srcFile,String bucketName, String destPath) throws IOException {
      BlobId blobId = BlobId.of(bucketName, srcFile.getName());
      BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();

  long startTime = System.currentTimeMillis();

 // Blob blob = storage.create(blobInfo,new FileInputStream(srcFile));

  try (WriteChannel writer = storage.writer(blobInfo)) {
    try (FileInputStream in = new FileInputStream(srcFile)){


        byte[] buffer = new byte[1024 * 1024 * 100] ;

        writer.setChunkSize(buffer.length);

        int readSize = 0;

        while((readSize = in.read(buffer)) > 0) {
             writer.write(ByteBuffer.wrap(buffer, 0, readSize));
        }

        long endTime = System.currentTimeMillis();

      double writeTime = (double)(endTime - startTime) / 1000;

      System.out.println("File write time : " + writeTime);

    }
  }


}
Run Code Online (Sandbox Code Playgroud)

我们的应用程序想要一次上传多个文件。我试图在Java API中找到一种上传多个文件的方法,但找不到使用单个调用上传多个文件的任何方法。

如果我使用多个调用循环和上传,则会增加巨大的网络开销,并且性能非常慢,这是应用程序无法承受的。

我的问题是:

  1. 是否可以使用 Java API 或 REST API 通过一次调用上传多个文件?
  2. 您能举个例子吗?

Mik*_*rtz 4

google-cloud-java 库和底层 JSON API 都没有用于上传多个文件的 API 调用,但您可以通过生成多个线程并让每个线程上传一个文件来完成您想要做的事情。gsutil -m 选项就是这样做的。