2010/11/06
GAE/JのBlobStoreを使ってみた
gae-sdk-1.3 から BlobStore って言うのが追加されてる。
通常の Blob は 1M の制限があるけど Blobstore が 2G までOK。
今時、デジカメの画像データでも 1M 超えるのは普通なので
GAE でマルチメディア系のデータを扱おうとすると必須かも。
Blobstore が通常の DataSotre のデータとして扱える訳では
なく、全く別のAPIとなる。
Upload用のUIは通常の multipart/form-data を POST する <form> で良い。
但し、POST先のURLは BlobstoreService.createUploadUrl() で得た物になる。
引数には次に記述する制御用 Servlet の URL を指定する。
/blobstore/UI.ssjs:
blobstore = Packages.com.google.appengine.api.blobstore;
function doGet(req, res) {
var blobstoreService = blobstore.BlobstoreServiceFactory.getBlobstoreService();
var action = blobstoreService.createUploadUrl("/blobstore/loader.ssjs");
var html =
;
res.setContentType("text/html");
res.writer.write(html);
}
Upload/Download自体は GAE がやってくれるがプログラムで制御を
行えるように Servlet が簡単な処理を行う必要がある。
一種のプロキシと考えれば良い。
/blobstore/loader.ssjs:
blobstore = Packages.com.google.appengine.api.blobstore;
var blobstoreService = blobstore.BlobstoreServiceFactory.getBlobstoreService();
// Uploader
function doPost(req, res) {
var props = blobstoreService.getUploadedBlobs(req);
var blobKey = props.get("uploadFile");
res.writer.write(blobKey.keyString); //キーの画面表示
}
// Downloader
function doGet(req, res) {
var blobKey = new blobstore.BlobKey(req.getParameter("key"));
blobstoreService.serve(blobKey, res);
}
準備ができたので早速アクセスしてみる。
何かエラーが出た。
まあ、Blobstore を使うと簡単に Quota を超えてしまうので払う用意は しておけって事らしい。
ちょっと迷ったけど上限設定もできるし CARD の登録をしました。 $2/1日が上限です。 billing を有効にして再度アクセスした所、画面が表示されました。
戻り値のキーコードは結構長いです。
ちなみに billing は速攻で無効にしました (^^;
何かエラーが出た。
The Blobstore API will be enabled for this application once billing has been enabled in the admin console.これは、、、お金を払えと言うことでふか、、、( ゚д゚)
まあ、Blobstore を使うと簡単に Quota を超えてしまうので払う用意は しておけって事らしい。
ちょっと迷ったけど上限設定もできるし CARD の登録をしました。 $2/1日が上限です。 billing を有効にして再度アクセスした所、画面が表示されました。
戻り値のキーコードは結構長いです。
AMIfv94E-by9-Y89Ybhm2oT-ER1mCYk8ZiflrHPKHsMEaGiU1zEDAZS_A8HKYC0uZolOYt8SBGatZ0bBWRjm9emBc5mbXBsSjlAyRJj05CSXBSVpHwrzpgq8oC-_QhWx6QKz7anLQb_eVuLINc1VxIttizmU5V8eVg管理画面から確認してみます。 追加のパラメータ pageName はここには入れてくれないようです。
http://wsjs-gae.appspot.com/blobstore/loader.ssjs?key=AMIfv961S2ndHQ2iypT9YlToo6G0yE0lubFu6BFLxxxr3wupcTO8f2ddvBuSxsZkzQWa7W_Iz-gwci249plRNv9gIwR2hN8QCHbsiz-OXO6QeG-NQkuwZ24uOYdSpCswIvBVbJZCQPz1wtTrRh8FKNe6iourzRSkiQちゃんと取れました。
ちなみに billing は速攻で無効にしました (^^;
この投稿へのコメント

コメント・フォーム