Google ストレージ API を使用して、GAE にデプロイされたアプリから画像を保持および取得しています。画像を正常に取得しましたが、永続化に関しては、詳細にエラー 400 が表示されます。
400 OK
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Required",
"reason" : "required"
}],
"message" : "Required"
}
この情報に基づいて、必要ないかもしれないと思ったので、なしで試しました。appspot の URL を追加すると、Google クラウド ストレージと通信しているときに次のようになりました。
400 OK
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Required",
"reason" : "required"
}, {
"domain" : "global",
"message" : "Could not find domain \"mydomain.appspot.com\".",
"reason" : "invalid"
} ],
"message" : "Required"
}
次の手順に従いました。
- Google Cloud Service への JSON API アクセスをオンにしました
- サービス アカウントを作成しました
- p12ファイルをダウンロードしました
- ファイルをエンコードしないようにmavenを構成しました
- ストレージ サービス API を含めるように構成された Maven
- サービス アカウントのメール アドレスをサービス アカウントとして使用して GoogleCredential を作成し、StorageScopes.DEVSTORAGE_FULL_CONTROL をスコープに追加して、秘密鍵ファイルにリンクしました (p12)
- 上記の資格情報、http トランスポートなどを使用して Storage オブジェクトをインスタンス化した
次のように StorageObject オブジェクトに設定される ObjectAccessControl オブジェクトのリストを使用しています。
...
//email from the service account client id configuration in the google cloud console
myAclList.add(new ObjectAccessControl()
.setEntity("user-" + settings.getEmail()).setRole("OWNER"));
//confused about what domain I should use; tried none,
myAclList.add(new ObjectAccessControl()
.setEntity("domain-" + settings.getDomain())
.setRole("READER"));
StorageObject objectMetadata = new StorageObject()
.setName("blahblah")
.setAcl(myAclList)
.setContentDisposition("attachment");
Storage.Objects.Insert insertObject = storage.objects()
.insert(settings.getBucket(), objectMetadata, mediaContent);
insertObject.execute(); //400 error happens here
...
ドメインに対して正確に何を送信する必要がありますか? おそらくコンソールで何かを設定していませんか?私はアイデアがありません。
ご提案いただきありがとうございます。
編集: google-api-services-storage jar の v1beta2-rev2-1.15.0-rc バージョンを使用しています。