我有GAE应用程序,它可以在Google Cloud Datastore中创建一些数据并将一些二进制文件存储到Google Cloud Storage中-我们将其称为WebApp应用程序。
现在,我在Google计算引擎上运行了另一个应用程序。我们将其称为应用程序ComputeApp。

ComputeApp是一个后端流程,正在处理由WebApp创建的数据。我之前在这里in this question询问过我可以使用哪个API与ComputeApp的存储进行通信。我使用Google Cloud Storage JSON API Client Library for Java实现了存储通信。

就我与Google云中的存储进行通信而言,一切正常。我正在使用服务帐户身份验证。

现在,我需要在开发PC上本地运行ComputeApp,以便获取由本地WebApp创建并存储到本地调试存储中的数据。我需要它是因为我想拥有一个测试环境,以便可以在本地调试may app。
我在本地运行的WebApp将二进制数据存储到本地数据存储中。我可以通过本地管理控制台查看它:(localhost:8080 / _ah / admin)。有实体列表GsFileInfo和__ah_FakeCloudStorage ...实体列表,它们代表我的存储数据。

如何修改ComputeApp代码以强制其连接到本地调试存储并访问本地存储的这些二进制数据,而不是连接到Google云?

最佳答案

在Google Project Console中创建帐户和服务帐户凭据

初始化:

private static final String APPLICATION_NAME = "your-webapp";
      private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

       GoogleCredential credential = GoogleCredential.getApplicationDefault();
              if (credential.createScopedRequired()) {
                credential = credential.createScoped(StorageScopes.all());
              }
              HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
              storageService = new Storage.Builder(httpTransport, JSON_FACTORY, credential)
                  .setApplicationName(APPLICATION_NAME).build();



   InputStreamContent mediaContent = new InputStreamContent(contentType, inputStream);


    StorageObject objectMetadata = null;
      objectMetadata = new StorageObject()
          .setName(name)
          .setMetadata(ImmutableMap.of("date", new Date().toString()))
          .setAcl(ImmutableList.of(
             new ObjectAccessControl().setEntity("allUsers").setRole("READER")

              ))
          .setContentDisposition("attachment");


    Storage.Objects.Insert insertObject = storageService.objects().insert("staging.your-app.appspot.com", objectMetadata,
        mediaContent);


    // For small files, you may wish to call setDirectUploadEnabled(true), to
    // reduce the number of HTTP requests made to the server.
    if (mediaContent.getLength() > 0 && mediaContent.getLength() <= 2 * 1000 * 1000 /* 2MB */) {
      insertObject.getMediaHttpUploader().setDirectUploadEnabled(true);
    }

    insertObject.execute();

10-05 17:53