从GAE createUploadUrl访问基础Google云端存储对象

时间:2012-10-25 04:00:18

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

我正在尝试将用户照片上传存储在Google云端存储中,但遇到了调用问题:

blobStoreService.createUploadUrl(...)

我需要跟踪哪个用户ID与上传的文件相关联。如果用户的ID是1234,我需要将其作为元数据存储在云存储文件中。

我可以在直接创建云存储文件时添加元数据:

GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
    .setBucket("myBucket")
    .setKey(key) // path...
    .addUserMetadata("userId", "1234");

但我真的想使用GAE提供的BlobStoreService.createUploadUrl(...),因为它支持比上面代码可以处理的更大的文件。是否可以使用createUploadUrl指定元数据?或者甚至可以找出创建了哪个谷歌存储密钥/文件名?


更新 我已经从上传回调serlvet中获得了blobKey。但是,我找不到将元数据添加到与此blobKey关联的 Google Storage 文件的方法。至少在本地,它认为它是BlobStore条目,而不是GS文件

    // get the key:
    Map<String, List<BlobKey>> blobKeysFromPost=BlobstoreServiceFactory.getBlobstoreService().getUploads(request);

    // pull out the blobKey generated from the recently submitted POST
    BlobKey blobKey = ... 

    // Now how do I access the cloud storage entry for this key?  I tried:
    AppEngineFile file = FileServiceFactory.getFileService().getBlobFile(blobKey);

    // But this file locally returns "blobstore":
    file.getFileSystem().getName(); // Should be GS.

2 个答案:

答案 0 :(得分:2)

我认为这是一个错误,文件上传到Google存储中的BlobKeys表示他们在BlobStore中。在不知道生成的文件名的情况下,我们无法与GS中的上传文件进行交互。例如,我们无法在文件上添加元数据,更改ACL,删除等...

我在GAE跟踪器中打开了这个问题: http://code.google.com/p/googleappengine/issues/detail?id=8337

答案 1 :(得分:0)

来自文档:

  

当用户提交表单时,POST由Blobstore API处理,后者创建blob。 API还会为blob创建信息记录并将记录存储在数据存储区中,并将重写的请求作为blob键传递给给定路径上的应用程序:

https://developers.google.com/appengine/docs/java/blobstore/overview#Uploading_a_Blob

因此,一旦上传,您将获得blob密钥,然后您可以保存并添加元数据。我只知道Python而AFAIK你没有将这种元数据添加到blobstore实体,你必须自己跟踪它。