Java 无法使用Google云存储JSON API复制文件夹

Java 无法使用Google云存储JSON API复制文件夹,java,google-app-engine,google-cloud-storage,Java,Google App Engine,Google Cloud Storage,我使用Java创建了一个GAE应用程序。我有一个包含文件夹和文件的存储桶,我正试图将它们复制到同一项目中的另一个存储桶中。 我的bucket的文件夹结构如下: Bucket_test |-------Folder1/ |-----testtxt1.txt |-------Folder2/ |-----testtxt2.txt 我正在尝试使用以下代码复制对象 String old_bucket = "Bucket_t

我使用Java创建了一个GAE应用程序。我有一个包含文件夹和文件的存储桶,我正试图将它们复制到同一项目中的另一个存储桶中。 我的bucket的文件夹结构如下:

Bucket_test
    |-------Folder1/
                |-----testtxt1.txt
    |-------Folder2/
                |-----testtxt2.txt
我正在尝试使用以下代码复制对象

String old_bucket = "Bucket_test";
String new_bucket = "Bucket_test_new";

Bucket isbkt = new GoogleStorageHelper()
.tryCreateBucket(new_bucket, storage);
Storage.Objects.List listObjects = storage.objects().list(old_bucket);

Objects objects;
objects = listObjects.execute(); 

for (StorageObject object
: objects.getItems()) {
Storage.Objects.Copy copyObject 
= 
storage.objects()
.copy(old_bucket, object.getName(), new_bucket, object.getName(), object);

try {
System.out.println("Trying to copy over " + object.getName() + " from " + old_bucket + " >>>> " + new_bucket);
//copy the file over to the new bucket
Object copyRes = copyObject.execute();
System.out.println(copyRes.toString());
}
catch (Exception e) {
System.out.println("Exception trying to copy over " + object.getName() + " " + e.getLocalizedMessage());
    }
发生了什么事? 我得到以下错误:

{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid bucket name: 'Bucket_test/Folder1'.",
"reason" : "invalidParameter",
"extendedHelp" : "https://developers.google.com/storage/docs/bucketnaming"
 } ],
 "message" : "Invalid bucket name: 'Bucket_test/Folder1'."
  }
}
应该怎么办

我希望它能够复制文件和文件夹,因为它们都被视为对象。如果文件直接在bucket中,而不是在任何文件夹中,我就能够成功地复制文件

  • 是否有其他方法可以复制文件和文件夹
  • 我是否需要使用前缀和分隔符SRC:
    在云存储中,文件夹不被视为对象:

    因为谷歌云存储系统没有文件夹的概念, 在Google开发者控制台中创建的文件夹便于 帮助您组织桶中的对象

    因此,如果对象名称遵循“part1/part2/part3”模式,那么浏览器将显示两个文件夹“part1”和“part2”,然后显示一个名为“part”的文件。但系统中真正存储的只是一个名为“part1/part2/part3”的文件

    因此,将文件夹复制到云存储并不意味着什么,因为文件夹不存在。您可能要做的是复制文件夹“folder1”中的所有文件。在这种情况下,您需要:

    • 列出名称以“folder1/”开头的所有对象
    • 对于每个对象,发出
      copy
      命令

    您还可以使用为您自动执行此操作的
    gsutil

    我可以使用setPrefix(“Folder1”)列出所有对象,但我仍然收到此错误。我甚至试过他们的“重写”方法,但它似乎给了我同样的错误。有什么想法吗?@cf。你对此有任何更新吗?我也遇到了同样的问题,尝试了几种方法,但都不管用。