私のユースケース:ファイルのアップロードとダウンロードにblobstoreを使用していません。私はblobstoreを使用して、プログラムが作成している非常に大きな文字列を格納しています。BLOBが格納されているパスを保持することで、後で文字列を再度ロードできます(ドキュメントを参照) 。
私の質問:パスを保存せずにBLOBコンテンツにアクセスする簡単な方法はありますか?BlobstoreServiceでは、HttpServletReponseに直接サービスを提供することしかできません。
私のユースケース:ファイルのアップロードとダウンロードにblobstoreを使用していません。私はblobstoreを使用して、プログラムが作成している非常に大きな文字列を格納しています。BLOBが格納されているパスを保持することで、後で文字列を再度ロードできます(ドキュメントを参照) 。
私の質問:パスを保存せずにBLOBコンテンツにアクセスする簡単な方法はありますか?BlobstoreServiceでは、HttpServletReponseに直接サービスを提供することしかできません。
「ブロブが保存されているパスを保持する」と言ったのは、どういうことBlobKey
ですか?
FileService
BLOB データに直接アクセスできます。
// Get a file service
FileService fileService = FileServiceFactory.getFileService();
// Get a file backed by blob
AppEngineFile file = fileService.getBlobFile(blobKey)
// get a read channel
FileReadChannel readChannel = fileService.openReadChannel(file, false);
// Since you store a String, I guess you want to read it a such
BufferedReader reader = new BufferedReader(Channels.newReader(readChannel, "UTF8"));
// Do this in loop unitil all data is read
String line = reader.readLine();
BlobKey を保存するだけで済みます。パス (ファイルであろうとなかろうと) を保存する必要はありません。
BLOB のコンテンツにアクセスするには:
BlobstoreService blobStoreService = BlobstoreServiceFactory.getBlobstoreService();
String myString =
new String(blobStoreService.fetchData(blobKey, 0, BlobstoreService.MAX_BLOB_FETCH_SIZE-1);
編集:非常に長い文字列がある場合は、ループ内の blob からデータを取得することにより、バイト配列を文字列に読み取る標準的な方法を使用できます。