我正在尝试将用户照片上传存储在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.
答案 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实体,你必须自己跟踪它。