4

ユーザーの写真のアップロードをGoogleCloudStorageに保存しようとしていますが、通話で問題が発生します。

blobStoreService.createUploadUrl(...)

アップロードされたファイルに関連付けられているユーザーIDを追跡する必要があります。ユーザーのIDが1234の場合、それをメタデータとしてCloudStorageファイルに保存する必要があります。

CloudStorageファイルを直接作成するときにメタデータを追加できます。

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

しかし、上記のコードで処理できるよりも大きなファイルをサポートしているため、GAEが提供するBlobStoreService.createUploadUrl(...)を本当に使用したいと思います。createUploadUrlでメタデータを指定することは可能ですか?または、どのgoogleストレージキー/ファイル名が作成されているかを見つけることさえ可能ですか?


更新 私はすでにアップロードコールバックserlvetからのblobKeyを持っています。ただし、このblobKeyに関連付けられているGoogleStorageファイルにメタデータを追加する方法が見つかりません。少なくともローカルでは、GSファイルではなくBlobStoreエントリであると見なします

    // 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 にファイルをアップロードすると、BlobStore にあると言う BlobKey が与えられるというバグだと思います。生成されたファイル名がわからないと、アップロードされたファイルを GS で操作できません。たとえば、ファイルにメタデータを追加したり、ACL を変更したり、削除したりすることはできません。

この問題を GAE トラッカーで開きました: http://code.google.com/p/googleappengine/issues/detail?id=8337

于 2012-10-25T15:29:20.807 に答える
0

ドキュメントから:

ユーザーがフォームを送信すると、Blobstore API によって POST が処理され、ブロブが作成されます。また、API は BLOB の情報レコードを作成し、そのレコードをデータストアに保存し、書き換えられたリクエストを指定されたパスで BLOB キーとしてアプリケーションに渡します。

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

アップロードが完了すると、BLOB キーが取得され、それを保存してメタデータを追加できます。私はPythonについてしか知りませんが、そのようなメタデータをブロブストアエンティティに追加することはできません。自分で追跡する必要があります。

于 2012-10-25T11:50:13.907 に答える