google-app-engine – 从GAE createUploadUrl访问底层Google云端存储对象

我正在尝试将用户照片上传存储在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.

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

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

点赞