Я пытаюсь сохранить файл в Google Cloud Storage с помощью службы jaxrs, работающей в Google App Engine. При попытке сохранить файл я становлюсь ниже ошибки.Google Cloud Storage - com.google.appengine.api.appidentity.AppIdentityServiceFailureException
com.google.appengine.tools.cloudstorage.NonRetriableException: com.google.appengine.api.appidentity.AppIdentityServiceFailureException: Служба AppIdentity бросил неожиданную ошибку. Детали:
Я пытаюсь сохранить файл в новом ковше и дал ниже разрешения ids (расчет, приложение и учетная запись службы) для ведра. Я также создал отдельную учетную запись службы и дал этой учетной записи службы также писатель Разрешение (с редактором роли на этот счет к проекту)
- [email protected]
- хххх-вычислительном @ разработчика .gserviceaccount.com
- [email protected]
Я понимаю, что учетная запись службы не требуется, потому что от приложения двигателя с обслуживанием по умолчанию, мы должны быть в состоянии сохранить файл. Но просто попробовать, я также создал выше учетной записи службы и хранится файл в WEB-INF/ресурсы/service_account_credentials.json место и установить ниже свойства в Appengine-web.xml
<property name="GOOGLE_APPLICATION_CREDENTIALS" value="WEB-INF/resources/service_account_credentials.json"/>
Я попытался ниже двух способов сохраните файл, но оба они дают ошибку.
Первый путь ...
Получение Услугу
GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder()
.initialRetryDelayMillis(10)
.retryMaxAttempts(10)
.totalRetryPeriodMillis(15000)
.build());
Сохранение файла
GcsFileOptions gcsFileOptions = null ;
GcsFileOptions.Builder builder = new GcsFileOptions.Builder() ;
if(aclEntityName != null)
builder = builder.acl(aclEntityName) ;
if(fileMetaData != null && !fileMetaData.isEmpty())
for(Map.Entry<String, String> entry : fileMetaData.entrySet()){
builder = builder.addUserMetadata(entry.getKey(), entry.getValue()) ;
}
gcsFileOptions = builder.build() ;
GcsFilename fileName = new GcsFilename(bucketName, name) ;
GcsService gcsService = StorageFactory.getGcsService() ;
GcsOutputChannel outputChannel = gcsService.createOrReplace(fileName, gcsFileOptions);
copy(contentStream, Channels.newOutputStream(outputChannel));
Второй путь, как указано ниже, также дает ту же ошибку ...
Получение службы
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential =
GoogleCredential.getApplicationDefault(transport, jsonFactory);
if (credential.createScopedRequired()) {
Collection<String> scopes = StorageScopes.all();
credential = credential.createScoped(scopes);
}
return new Storage.Builder(transport, jsonFactory, credential)
.setApplicationName("GCS Samples")
.build();
Сохранение файла второй путь
StorageObject objectMetaData = new StorageObject();
objectMetaData.setName(name);
if(fileMetaData != null && fileMetaData.isEmpty() == false)
objectMetaData.setMetadata(fileMetaData) ;
// Set the access control list to publicly read-only
if(aclEntityName != null && !aclEntityName.trim().equals("")
&& aclRole != null && !aclRole.trim().equals("")) {
objectMetaData.setAcl(Arrays.asList(
new ObjectAccessControl().setEntity(aclEntityName).setRole(aclRole)));
}
InputStreamContent mediaContent = new InputStreamContent("application/octet-stream", contentStream);
// Do the insert
Storage client = StorageFactory.getService();
Storage.Objects.Insert insertRequest = client.objects().insert(
bucketName, objectMetaData, mediaContent);
if (mediaContent.getLength() > 0 && mediaContent.getLength() <= 2 * 1000 * 1000 /* 2MB */) {
insertRequest.getMediaHttpUploader().setDirectUploadEnabled(true);
}
insertRequest.execute();
Что я делаю неправильно? Есть ли какой-либо параметр, который мне нужно сделать, чтобы исправить эту ошибку? Пожалуйста помоги !!!
Предоставляет ли исключение более подробную информацию (после «Подробности:»)? Если да, включите его в свой вопрос. – SimonJ
Нет, перед информацией нет информации. Просто пустое место. –