Google App Engine Java API writte in bucket on local dev server 不起作用



我使用 GCSService 在 GoogleCloudStorage 存储桶中写入文件,在在线实例上一切正常,但是当我想在本地开发服务器上测试我的代码时,不可能在存储桶中写入(模拟本地存储桶,如数据存储)。我尝试使用胖客户端的远程 API 在本地服务器上编写额外的困难,我在网上搜索,我找不到答案。当我调用我的createOrUpdate()方法时,我有这个异常:

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/InstanceName/FileInfos

似乎试图在我的在线存储桶上写...

GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
...
RemoteApiOptions destination = RemoteConnection.connect(destinationServer);
RemoteApiInstaller destinationInstaller = new RemoteApiInstaller();
destinationInstaller.install(destination);
try
{
    GcsOutputChannel outputChannel = gcsService.createOrReplace(new GcsFilename(destinationBucketServer, fileInfo.getFilename()),
            GcsFileOptions.getDefaultInstance());
    outputChannel.write(ByteBuffer.wrap(data));
    outputChannel.close();
}
catch (Exception e)
{
    ....
}
finally
{
    buffer.flush();
    destinationInstaller.uninstall();
}

使用相同的代码,我可以毫无问题地在数据存储中编写,这只是存储问题。

请参阅 Google Cloud Storage 错误和错误处理和服务帐号文档。

403表示用户无权发出请求。在您的 GCE 实例上运行时,我猜您的代码是在对您的存储桶具有写入权限的服务帐户中运行的。在本地运行时,必须提供适当的凭据才能执行此操作。

我想出了为什么这不起作用,实际上通过 RemoteAPI 调用 GCS 不会在本地服务器上写入,而是在本地存储桶上写入。这就是为什么我没有正确的ACL,我的代码尝试连接到云存储。但是现在我不知道如何强制GCSService在我的本地服务器上写入。

相关内容

  • 没有找到相关文章