使用 json 返回 blob

2022-08-30 21:47:00

我正在尝试为我的Android应用程序创建一个休息服务,其中外部数据库返回要存储在应用程序本地数据库中的项目。我已经让一切正常,除了 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);
?>

有人知道这个问题的解决方案吗?我知道我没有以最有效的方式做到这一点(最好将图像存储在文件系统中),但我需要它来工作。


答案 1

在生成 JSON 之前,将二进制数据编码为 base64。

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

然后,您可以使用任何base 64解码器在Android应用程序中对其进行解码。从 API 级别 8 开始,有一个内置的 util 类。否则,您可以使用大量外部库来定位Android 2.1或更早版本。


答案 2

你必须使BLOB base64_encode

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

然后准备一个像这样的前循环

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);

推荐