4

我正在尝试将用户照片上传存储在 Google Cloud Storage 中,但在通话时遇到问题:

blobStoreService.createUploadUrl(...)

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

我可以在直接创建 Cloud Storage 文件时添加元数据:

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

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


更新 我已经从上传回调 serlvet 获得了 blobKey。但是,我找不到将元数据添加到与此 blobKey 关联的Google 存储文件的方法。至少在本地,它认为它是一个 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.
4

2 回答 2

2

我认为这是一个错误,即 Google Storage 中的文件上传被赋予 BlobKeys,表明它们在 BlobStore 中。在不知道生成的文件名的情况下,我们无法在 GS 中与上传的文件进行交互。例如,我们不能在文件上添加元数据、更改 ACL、删除等......

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

于 2012-10-25T15:29:20.807 回答
0

从文档:

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

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

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

于 2012-10-25T11:50:13.907 回答