web-dev-qa-db-ja.com

jsonでblobを返す

AndroidアプリケーションのRESTサービスを作成しようとしています。外部データベースは、アプリケーションのローカルデータベースに格納されるアイテムを返します。blobがnullとして返されることを除いて、すべてが機能しています。 。

これは私のジェイソンの応答の例です(画像とサムネイルのフィールドはblobです)

{"id":"2","user_id":"1","name":"testing","type":"bouldering","picture":null,"lat":"36","long":"81","alt":"41932","accuracy":"53","thumbnail":null}

これがデータを返すための私のphpスクリプトです。

<?php
require_once('config.php');

$mysqli = new mysqli(DB_Host,DB_USER,DB_PASSWORD,DB_NAME);
$sql = 'select * from spot_main';
$results =$mysqli->query($sql);

$spots = array();  //array to parse jason from

while($spot = $results->fetch_assoc()){
    $spots[] = $spot;                                                           
}

echo json_encode($spots);
?>

この問題の解決策を知っている人はいますか?私はこれを最も効率的な方法(ファイルシステムに画像を保存する方が良い)ではないことを知っていますが、これが機能する必要があります。

12
Charlie Jonas

JSONを生成する前に、バイナリデータをbase64としてエンコードします。

$obj->picture = base64_encode($binaryData);

次に、これをAndroidアプリケーションで任意のbase64デコーダーを使用してデコードできます。APIレベル8以降、組み込みの til class があります。それ以外の場合は、外部ライブラリがたくさんあります。 Android 2.1以前のターゲティングに使用できます。

26

BLOBをbase64_encodeにする必要があります

 while($spot = $results->fetch_assoc()){
     $spots[] = $spot;                                                           
    }

次に、このようなforeachループを準備します

foreach($spots as $key=>$value){
    $newArrData[$key] =  $spots[$key];
    $newArrData[$key]['picture'] = base64_encode($spots[$key]['picture']);
    $newArrData[$key]['thumbnail'] = base64_encode($spots[$key]['thumbnail']);
}
header('Content-type: application/json');
echo json_encode($newArrData);
7
Sam T

のようだ json_encodeUTF-8でエンコードされたデータでのみ機能します。 json_last_error() を使用してjson_encodeエラーを検出できます。

0
Karolis