2013-08-20 9 views
6

プログラムで生成されたデータを保存するためにBlobstoreを使用するGoogle App Engineアプリケーションを作成しました。これを行うには、私はFiles APIを使用しましたが、残念ながらGoogle Cloud Storageを推奨していません。だから私はヘルパークラスをGCSで作業するように書き直しています。BlobKeyからGoogle Cloud Storageファイルを取得

データストアにBlobKeysを保存してファイルへの参照を保持する(そして本番アプリケーションのモデルを変更することは常に苦しい)ため、できるだけ似たようにインターフェイスを維持したいと考えています。私はGCSに何かを保存すると、私は、所定のhereとして

BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName()); 

でblobKeyにを取得し、私はデータストアでそれを持続します。

ドキュメントには、blobstoreService.serve(blobKey, resp);というGCSファイルをサーブレットレスポンスで提供する方法が示されていますが、コード内でファイルコンテンツ(InputStream、バイト配列など)を取得するにはどうすればよいですかさらなる処理?私の現在の実装では、AppEngineFile(どちらも非推奨)からのFileReadChannelの読み込みでそれを行います。

答えて

3

入力ストリームとしてGoogleストレージオブジェクトを開くためのコードです。残念ながら、あなたはあなたが唯一のアップロード・ハンドラ(fileInfo.gs_object_name)にcloudstorageファイル名を取得し、それをデータベースに保存することができバケット名やオブジェクト名と

GcsFilename gcs_filename = new GcsFilename(bucket_name, object_name); 
GcsService service = GcsServiceFactory.createGcsService(); 
ReadableByteChannel rbc = service.openReadChannel(gcs_filename, 0); 
InputStream stream = Channels.newInputStream(rbc); 
+0

ありがとう!私はBlobKeyを使用してコンテンツを取得することを望んでいましたが、それを行う方法がない場合は、オブジェクト名を含むように私のモデルをリファクタリングします –

0

キーではないブロブを使用する必要があります。その後、それは失われ、BlobInfoやその他のメタデータ構造には保存されていないようです。

Googleは言う:BlobInfoメタデータのFileInfoメタデータとは異なり が データストアに永続化されていません。 (ブロブキーもありませんが、必要に応じてcreate_gs_keyを呼び出すことで、後で を作成できます)。gs_object_name をアップロードハンドラに保存する必要があります。そうしないと、このデータは失われます。

申し訳ありませんが、これはPythonのリンクですが、javaと同様のものを見つけるのは簡単です。 blobKey考える https://developers.google.com/appengine/docs/python/blobstore/fileinfoclass

3

documentationで説明したように、ブロブストアから値を読み取るためにBlobstoreInputStreamクラスを使用します。ここでは

BlobstoreInputStream in = new BlobstoreInputStream(blobKey); 
0

は、ブロブストアのアプローチである(申し訳ありませんが、これは、Pythonのためですが、私は確かにJavaの場合と似ています)。

blob_reader = blobstore.BlobReader(blob_key) 
if blob_reader: 
    file_content = blob_reader.read() 
関連する問題