Я использую API хранения Google для сохранения и получения изображений из приложения, развернутого в GAE. Я успешно извлекать изображения, но когда дело доходит до сохраняющегося я получаю ошибку 400 с этим в деталях:В каком домене Google Cloud Storage ожидаются определения ACL при вставке объекта?
400 OK
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Required",
"reason" : "required"
}],
"message" : "Required"
}
Основываясь на this information я думал, что я не нужен, так что я пытался без. Когда я добавил 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"
}
Я следовал следующие шаги:
- включен JSON API доступа к Google Cloud Service
- создал учетную запись службы
- загруженный файл p12
- сконфигурированные Maven не кодировать файл
- сконфигурированной Maven для включения службы хранения апите
- создал GoogleCredential с помощью учетной записи службы электронной почты в качестве учетной записи службы, добавил StorageScopes.DEVSTORAGE_FULL_CONTROL в объемы и связан с файлом закрытого ключа (p12)
- экземпляром объекта хранения используя вышеупомянутую верительных, HTTP транспорта и т.д.
Я использую список объектов, которые получают ObjectAccessControl установить на объекте StorageObject, как например:
...
//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
...
что именно Shoul d Я отправляю для домена? Может быть, мне не хватает конфигурации на консоли? У меня нет идей.
Благодарим вас за предложения!
EDIT: Я использую версию v1beta2-rev2-1.15.0-rc в банке google-api-services-storage.
По умолчанию список ACL должен быть настроен на разумное значение по умолчанию. Если вы попытаетесь полностью отказаться от setAcl(), что-то для вас работает? –
Извлечение setAcl() дает тот же результат. – edlftt
Фактически [ObjectAccessControls doc] (https://developers.google.com/storage/docs/json_api/v1/defaultObjectAccessControls) ничего не говорит о настройке домена как объекта, просто группы или пользователя, пока домен должен быть установлен если доступно, но пример в документе [Object insert doc] (https://developers.google.com/storage/docs/json_api/v1/objects/insert?hl=ru) показывает, что домен, заданный как объект в ACL. – edlftt