Java 无法使用Google云存储JSON API复制文件夹
我使用Java创建了一个GAE应用程序。我有一个包含文件夹和文件的存储桶,我正试图将它们复制到同一项目中的另一个存储桶中。 我的bucket的文件夹结构如下: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
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中,而不是在任何文件夹中,我就能够成功地复制文件
在云存储中,文件夹不被视为对象: 因为谷歌云存储系统没有文件夹的概念, 在Google开发者控制台中创建的文件夹便于 帮助您组织桶中的对象 因此,如果对象名称遵循“part1/part2/part3”模式,那么浏览器将显示两个文件夹“part1”和“part2”,然后显示一个名为“part”的文件。但系统中真正存储的只是一个名为“part1/part2/part3”的文件 因此,将文件夹复制到云存储并不意味着什么,因为文件夹不存在。您可能要做的是复制文件夹“folder1”中的所有文件。在这种情况下,您需要:
- 列出名称以“folder1/”开头的所有对象
- 对于每个对象,发出
命令copy
您还可以使用为您自动执行此操作的
gsutil
。我可以使用setPrefix(“Folder1”)列出所有对象,但我仍然收到此错误。我甚至试过他们的“重写”方法,但它似乎给了我同样的错误。有什么想法吗?@cf。你对此有任何更新吗?我也遇到了同样的问题,尝试了几种方法,但都不管用。