BlobをJSONにして送信し、Androidなどで読み込む方法について

1,372 views
Skip to first unread message

小城佑介

unread,
Nov 12, 2014, 2:43:57 AM11/12/14
to google-app-...@googlegroups.com

毎度お世話になっております。

現在GAEをしようしてBlobを保持しているエンティティをJSONにし、iPhoneやAndroidに送信をしようとしています。

そこで問題が発生したのですが、
Blobを保持したエンティティをJavaやSwiftなどで取り出す場合、どのようにするのでしょうか?
やってみたのですが、画像の取得には至っていません。


GAEではこのようにしてBlobを生成しています。

BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo("Blobにしたい画像のkey");

byte[] binary = blobstoreService.fetchData(key, 0, blobInfo.getSize());

hoge.setImageBlob(new Blob(binary));

このhogeクラスのimageBlobフィールドにBlobを格納し、JSONにして送信しています。


ブラウザでJSONを確認するとBlobの箇所が

"imageBlob":{"bytes":"iVBORw0KGgoAAAANSUhEUgAABAAAAAJACAYAAAA....//省略します。

となっております。

また皆様はバイナリデータを送信する場合、何か確認用のソフトなどをお持ちなのでしょうか?
このバイナリが送信したい画像のバイナリデータなのかを確認したいのですが、おすすめなど
ありましたら、ご教示ください。

よろしくお願い致します。

a-know

unread,
Nov 12, 2014, 5:38:33 PM11/12/14
to google-app-...@googlegroups.com
こんにちは。a-knowです。

Blob にした画像は、Blob の key を元に ImagesService.getServingUrl() を用いて画像URLを受け取る必要があります。
(そのURLをクライアントにJSONなりで返せばよいと思います)


手前味噌ながら、自分の過去のコードで似たようなことを実施している箇所がありましたので
ご参考までに、付記させて頂きます。


また、こちらも私の過去の資料になってしまい恐縮なのですが、
下記のスライドの44ページ目もご参考になるかと思われます。
(ただ、載っている情報はすごく古いのでお気をつけ下さい...そういう意味では、BlobStoreの使用自体があまりよろしくないのかもしれませんが^^;)




2014年11月12日水曜日 16時43分57秒 UTC+9 小城佑介:

najeira

unread,
Nov 12, 2014, 8:01:03 PM11/12/14
to google-app-...@googlegroups.com
bytesの中身がBASE64エンコードされた画像データなのではないでしょうか。



2014年11月12日水曜日 16時43分57秒 UTC+9 小城佑介:

小城佑介

unread,
Nov 13, 2014, 8:09:13 PM11/13/14
to google-app-...@googlegroups.com

a-know

さっそくのコメントありがとうございます。


普段は画像URLJSONにして返していたのですが、

例えばHogeデータがあり、その中に画像URLのプロパティがあるとすると

Hogeデータを取得、その後に画像の取得となってしまい、2度アクセスすることになって

しまいます。


それをどうにか1度の通信で終了させるために今回バイナリでデータを返したいと

思っておりました。


a-know様の資料過去に拝見させて頂いた事のあるものでした。

ご本人からアドバイスを頂けた事、光栄に思います。


ありがとうございました。

小城佑介

unread,
Nov 13, 2014, 8:12:40 PM11/13/14
to google-app-...@googlegroups.com

najeira

さっそくのコメントありがとうございます。


Base64にエンコードされているとのアドバイスを受け、確かにそのような気がします。

ですが、デコードしてもうまく表示できないので私の処理をもう一度見直してみます。

この場合、Blobそのものをデコードしているのですが、中身だけデコードどうにか

デコードできるといいのですが、、、、

iOSで受け取った際はNSData形式で取得し、NSDataをBase64デコードしています。


アドバイスありがとうございました。

a-know

unread,
Nov 14, 2014, 6:45:19 PM11/14/14
to google-app-...@googlegroups.com
小城さん

こんにちは。a-knowです。
すみません、ご質問内容を勘違いしていたようですね^^;
改めて内容を見なおさせて頂きますm(_ _)m

> 例えばHogeデータがあり、その中に画像URLのプロパティがあるとすると
> Hogeデータを取得、その後に画像の取得となってしまい、2度アクセスすることに

本題とはずれてしまうのですが、
一度取得した画像URLも Hoge エンティティのプロパティとして持たせる、などのことをすれば
少し緩和は出来そうですね(^^)。

↓のようなやりとりも過去にあったようです(既にこちらもご覧になられているかもしれませんが)、ご参考までに。。



2014年11月14日金曜日 10時09分13秒 UTC+9 小城佑介:

silvia

unread,
Nov 16, 2014, 10:00:34 PM11/16/14
to google-app-...@googlegroups.com
ブラウザで確認できれば良いのであれば、HTML5のFileAPIを使用して画像データを表示するのは如何でしょうか?
クライアント側でバイナリを読みだすので、1度の通信になるかと思います。


2014年11月12日水曜日 16時43分57秒 UTC+9 小城佑介:
Reply all
Reply to author
Forward
0 new messages