如何在我的本地开发服务器上启用 Google Cloud Storage?

我想使用 GCS 存储桶作为我的 blobstore 的后备库,但我不知道如何在我的开发服务器上设置一个。

有关于在实时服务器上使用开发人员控制台执行此操作的说明,但是我找不到有关如何在本地开发计算机上执行此操作的任何信息...


答案 1

事实证明,您根本不需要执行任何设置。我只是假设在使用 blobstore 上传时有一个具有特定名称的存储,并且自动为我创建了一个。

顺便说一句,似乎没有记录到如何浏览开发服务器存储中的文件。您可以通过在数据存储查看器管理员访问本地开发服务器中选择实体来执行此操作。__GsFileInfo__


答案 2

对于那些试图让Google Cloud Storage从他们的本地Java开发应用程序服务器工作的人来说,我认为另一个答案会有所帮助。我设法让我的本地开发应用程序服务器与非本地Google Cloud Storage一起使用,但只是挖掘代码并找出需要什么 - 似乎没有这方面的文档。

目标是让这个代码块在本地工作,从GCS读取文件:

    GcsService gcsService =
       GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
    int fileSize = (int) gcsService.getMetadata(gcsFilename).getLength();
    ByteBuffer byteBuffer = ByteBuffer.allocate(fileSize);
    GcsInputChannel inputChannel = gcsService.openReadChannel(gcsFilename, 0);
    int readResult = inputChannel.read(byteBuffer);
    byte[] fileBytes = byteBuffer.array();

如果您尝试在本地执行此操作,则不会找到已上传到GCS的任何文件,因为它将尝试使用虚假的本地GCS。不幸的是,我还没有找到一种上传到这个本地GCS的好方法,所以这不是很有用(在云版本中没有文件资源管理器,gsutil也不适用于它)。因此,相反,我们将在本地开发应用服务器中运行时使其与非本地(云)GCS 配合使用。

为此,请注意,GcsService 是由以下代码块在 com.google.appengine.tools.cloudstorage.GcsServiceFactory 中创建的:

if (location == SystemProperty.Environment.Value.Production || hasCustomAccessTokenProvider()) {
  rawGcsService = OauthRawGcsServiceFactory.createOauthRawGcsService(builder.build());
} else if (location == SystemProperty.Environment.Value.Development) {
  rawGcsService = LocalRawGcsServiceFactory.createLocalRawGcsService();

上面说,您需要指定自定义访问令牌提供程序来获取非本地服务,这是通过定义系统属性来实现的。对于应用引擎应用,您可以在 appengine-web 中执行此操作.xml如下所示:

<system-properties>
    <property name="gcs_access_token_provider" value="com.mypackage.MyAccessTokenProvider" />
</system-properties>

该属性的此值是你定义的一个类,该类实现 com.google.appengine.tools.cloudstorage.oauth.AccessTokenProvider,它为您的应用程序提供访问令牌。该类需要创建一个GoogleCredential,该Credential可用于获取访问令牌,使用GoogleCredential的“其他”说明 https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests

现在,它将创建一个与云通信的OAuth GcsService,并且您不需要使用虚假的本地存储。


推荐