在servlet中列出GCS存储桶中的文件并使用blob提供服务

时间:2013-08-22 20:02:00

标签: android google-app-engine servlets google-cloud-storage google-api-java-client

我从4天开始就一直关注这个话题。我想将Google云端存储中列出的文件下载到我的应用中。为此:

1)我在GAE中创建了我的应用程序并设置了我的Google云端存储项目并创建了我的存储桶。

2)现在我想编写一个servlet,列出“mybucket”中的文件并用blob提供它,我将在我的android应用程序中读取(通过Http响应)并保存到SD卡或内存。为此,我收集了一段代码,但我不知道如何将它组合在一起。

我甚至不确定我做得对。非常感谢您的帮助或链接或建议。如果您需要任何进一步的信息,请与我们联系。

将在servlet中实现步骤2)的代码:

Storage.Objects.List listObjects = storage.objects().list("mybucket");
Objects objects;
do {
  objects = listObjects.execute();
  for (StorageObject object : objects.getItems()) {
    // Do things!
  }
  listObjects.setPageToken(objects.getNextPageToken());
} while (null != objects.getNextPageToken());

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobstoreService.createGsBlobKey(
    "/gs/"+"androidbucket"+"/"+filename");
blobstoreService.serve(blobKey, resp);

现在关于这段代码片段的问题是“Storage.Objects.List”将如何知道它在哪个项目中寻找“mybucket”?因为我在GAE上的应用程序设置下阅读此行“在创建新存储桶或列出项目拥有的存储桶时,必须指定x-goog-project-id HTTP标头以识别您正在使用的项目。”

编辑:我也无法在“Storage.Objects.List”上编译我的servlet。我已从此链接下载了Cloud Storage API:https://code.google.com/p/google-api-java-client/wiki/APIs#Cloud_Storage_API ..谢谢!!

1 个答案:

答案 0 :(得分:1)

你的引言:

  

创建新存储桶或列出项目拥有的存储桶时,   您必须指定x-goog-project-id HTTP标头   确定您正在使用的项目。

这是指列出存储桶。您正在列表中列出对象

如果您要检索存储桶列表,则必须传入项目ID。 reference for buckets.list显示了如何执行此操作:

Storage.Buckets.List listBuckets = storage.buckets().list("myproject");