Google Appengine Cloud Storage

时间:2017-02-04 12:44:27

标签: java google-app-engine google-cloud-storage

我有一个App引擎应用程序。我想使用云存储来存储一些用户上传的文件。

我想知道如何进行简单身份验证,以访问每个应用引擎应用程序附带的单个免费存储桶。

我只希望应用程序本身与云存储通信,并且用户无需与云存储进行任何交互。每个文件都可以放在同一个文件夹中,只需要可以访问App引擎JVM。

是否有一种简单的身份验证方式,而无需通过Oauth2等?一种简单的服务器到服务器类型的访问,如果可能的话!

编辑:它与此相同吗?

gcloud beta auth application-default login

编辑2:尝试了以上Gcloud的默认身份验证设置。仍然会抛出相同的异常。

com.google.cloud.storage.StorageException: Invalid Credentials

测试我正在使用的代码:

private static Storage storage = null;
static {
      storage = StorageOptions.getDefaultInstance().getService();
    }

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    PrintWriter out = resp.getWriter();
    out.println("Hello, world");

    testCloudStorage();
}

private void testCloudStorage() throws IOException{
    ByteArrayInputStream baIs = new ByteArrayInputStream("TEST FILE CONTENT".getBytes());
    uploadFile("test-content.txt", baIs, "xyzabc.appspot.com");
}

/**
 * Uploads a file to Google Cloud Storage to the bucket specified in the BUCKET_NAME
 * environment variable, appending a timestamp to end of the uploaded filename.
 */
public String uploadFile(String fileName, InputStream inputStream, final String bucketName) throws IOException {
  DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
  DateTime dt = DateTime.now(DateTimeZone.UTC);
  String dtString = dt.toString(dtf);
  final String extendedFileName = fileName + dtString;

  // the inputstream is closed by default, so we don't need to close it here
  BlobInfo blobInfo =
      storage.create(
          BlobInfo
              .newBuilder(bucketName, extendedFileName)
              // Modify access list to allow all users with link to read file
              .setAcl(new ArrayList<>(Arrays.asList(Acl.of(Acl.User.ofAllUsers(), Role.READER))))
              .build(),
          inputStream);
  // return the public download link
  return blobInfo.getMediaLink();
}

编辑3:这些是我遵循的步骤:

  1. 我有一个基本的工作JSP示例应用程序 - devserver和部署版本都正常工作
  2. DataStore正在运行 - 插入/更新/删除
  3. 我在this tutorial
  4. 之后添加了云存储的示例代码
  5. 我跟着this tutorial安装了GCloud SDK并执行了init并设置了默认的auth

1 个答案:

答案 0 :(得分:1)

Appengine项目已经使用各自的存储桶进行了身份验证。根据{{​​3}}创建存储桶后,无需其他身份验证。

然后,您可以根据这些文档或blobstore https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/setting-up-cloud-storage使用存储桶。