4

Google Cloud Storage 内にフォルダがない (オブジェクトとして扱われる) ことは既に知っているので、私の質問を見て、私の意味を理解してください。ありがとう :-)

これはオブジェクトをアップロードする私の方法であり、私の特定のケースでは、「フォルダー」をアップロードしたいので、「/」で終わるファイル (例: 「newfolder/」) ですが、GoogleJson を受け取りますコードの最後にある execute() のエラー。

[エラー]:

Uncaught exception from servlet
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 OK
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Required",
    "reason" : "required"
  }, {
    "domain" : "global",
    "message" : "Required",
    "reason" : "required"
  }, {
    "domain" : "global",
    "message" : "Required",
    "reason" : "required"
  } ],
  "message" : "Required"
}

[メソッド内の私のコード]:

StorageObject objectMetadata = null;

        //default bucket
        String bucketRootName = “defaultbucketname”;

        //First Folder
        String folderAppName = “myfolder”;

        //folder that i want to create (upload)
        folderName+="/";
        String folderPath = folderAppName + "/" + folderName;

        if (useCustomMetadata) {

            List<ObjectAccessControl> acl = Lists.newArrayList();
            acl.add( new ObjectAccessControl().setEntity("allAuthenticatedUsers").setRole("OWNER"));

            objectMetadata = new StorageObject()

            .setName(folderPath)
            .setAcl(acl)
            .setContentDisposition("attachment");
        }

        Storage.Objects.Insert insertObject = storage.objects().insert(bucketRootName, objectMetadata);

        StorageObject metadata = insertObject.execute();
        return metadata;

次のようなパスを持つバケットを作成するには: defaultbucketname/myfolder/folderName/

誰もそれを解決する方法を知っていますか?

どうもありがとう

4

2 に答える 2

2

アップロードされたオブジェクトには、サイズが 0 バイトであっても Content-Type が必要です。

また、サイズが 0 バイトであっても、実際のファイルをアップロードする必要があると確信しています。

于 2014-06-03T09:31:34.497 に答える
0

その方法でフォルダを作成できるとは思いません。ただし、名前を設定することで、ファイルのアップロード中に作成できます。

たとえば、foldA/foldB/test.txt の下にファイルを作成する場合は、次の方法で実行できます。

    InputStream is = Files.newInputStream(path); //path if java.nio.file.Path
    String mimeType = Files.probeContentType(path);
    InputStreamContent isContent = new InputStreamContent(mimeType, is);
    StorageObject objectMetadata = new StorageObject();

    Storage.Objects.Insert insertObject = storage.objects().insert(bucketRootName, objectMetadata,isContent);

    insertObject.setName("foldA/foldB/"+path.getFileName().toString()); // path.getFileName().toString() will give u test.txt
    insertObject.execute();
于 2014-09-02T09:27:28.243 に答える