无法从Appengine项目访问默认的Google云端存储桶。此项目是使用1.9.0之前的App引擎SDK版本创建的。我已经手动创建了存储桶,根据GCS Documentation,默认情况下该存储桶可供Appengine项目访问,但在我的情况下无法访问。这是试图创建一个文件中的代码片段。在日志中发现Google App Engine应用未能访问Google云端存储桶
...
GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename file = new GcsFilename(getGcsDefaultBucketName(), fileName);
GcsFileOptions.Builder builder = new GcsFileOptions.Builder();
GcsFileOptions options = builder.mimeType(mimeType).build();
GcsOutputChannel channel = gcsService.createOrReplace(file, options); //erroring in this line
...
错误:
: com.google.appengine.tools.cloudstorage.NonRetriableException: java.lang.RuntimeException: Server replied with 403, verify ACLs are set correctly on the object and bucket: Request: POST https://storage.googleapis.com/1-ebilly.appspot.com/SERVICESTAGEREPORT-DEVICENAME-LYF2-CREATEDDATE-01012017-CREATEDDATE-19022017-.ZIP
: User-Agent: AppEngine-Java-GCS
: Content-Length: 0
: x-goog-resumable: start
: Content-Type: application/zip
:
: no content: Response: 403 with 212 bytes of content
: X-GUploader-UploadID: AEnB2Upq0Lhtfy5pbt06pVib8J0-L0XiGqW4JpB0G9PL87keY3WV7RCMVLCPeclD-D4UATEddvvwpAG2qeeIxUJx--brKxdQFw
: Content-Type: application/xml; charset=UTF-8
: Content-Length: 212
: Vary: Origin
: <?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>Caller does not have storage.objects.create access to bucket myprojectID.appspot.com.</Details></Error>
:
: at com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:120)
: at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166)
: at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156)
: at com.google.appengine.tools.cloudstorage.GcsServiceImpl.createOrReplace(GcsServiceImpl.java:70)
PS:我试图创建一个新的谷歌的AppEngine项目和部署应用程序初始化。该项目是使用默认的GCS桶自动创建的,并且相同的代码工作正常,没有任何错误。我的旧项目有很多我想保留的DB数据,并继续使用同一个项目而不处理它。
请帮助您的想法使旧项目中可以访问GCS存储桶。
我怀疑你的旧桶不具有相同的权限目前的缺省桶。尝试为旧项目创建一个新存储桶并使用它来获取必要的权限,然后根据需要手动将其应用于旧存储桶。一个桶命名不匹配也是可能的,也许使用明确命名的桶(而不是默认应用的桶)可以解决这种情况。 –
感谢您的更新,我已解决问题,请参阅我的答案以获取详细信息。 – v7r