通过PHP从SQl获取图像blob并转换Json字符串


Get a Image Blob from SQl via PHP and convert Json string

我是在这里发帖的新手,所以请耐心等待。

:如何通过 php 将存储为 blob 的图像作为 json 字符串传递?

情况:我有一个简单的慈善数据库,其中包含字段charity_id(int),charity_name(字符串),图片(blob)和其他几个字段。

我想用 php 获取 id、charity_name 和图片,并将数据作为 json 字符串传递给我的 android 应用程序,在那里它将使用 volley 库解析。

我一切正常并正确传递,除了我的图片字段传递 null 而不是字符串。

<?php 
if($_SERVER['REQUEST_METHOD']=='GET'){
    $id  = $_GET['id'];
    require_once('dbConnect.php');
    $sql = "SELECT charity_id, charity_name,picture FROM charity_table WHERE charity_id = '".$id."'";
    $r = mysqli_query($con,$sql);
    $res = mysqli_fetch_array($r);
    $result = array();

    array_push($result,array(
        "charity_id"=>$res['charity_id'],
        "charity_name"=>$res['charity_name'],
        "picture"=>$res['picture']
        )
    );
    echo json_encode(array("result"=>$result));
    mysqli_close($con);
}

传递的 JSON 值 {"result":[{"charity_id":"1","charity_name":"charity1","picture":null}]}

因为我对这个过程的理解(可能是错误的)是 php 从 sql 获取一个二进制字符串,然后将该字符串放入 json 数组中,然后 android 读取该数组并将二进制字符串转换为位图图像。

不是

将图像存储为 blob,而是可以在数据库中存储图像的引用路径,然后

  1. 从数据库返回一行

  2. 使用图像引用 URL,您可以根据需要将图像下载为具有异步调用的二进制块。

JSON 无法处理原始二进制数据,您需要以某种方式对其进行编码,而"如何"几乎是规范的 base64。

在服务器端使用它:

array_push($result,array(
    "charity_id"=>$res['charity_id'],
    "charity_name"=>$res['charity_name'],
    "picture"=>base64_encode($res['picture'])
    )
);

并在安卓端实现相关的base64解码。

也就是说,我同意关于这个问题的其他评论:

  1. 文件应存储在文件系统中,并且仅存储在数据库中的引用。
  2. 您可能应该通过单独的简单 HTTP 请求提供图像,而不是将其管道到 JSON 中。
    • 值得注意的是,以文本安全的方式编码二进制数据总是会膨胀大小,对于 base64,它大约大 30%。
    • 可以并行处理单独的请求。

如果您只是以这种方式存储和提供小图标或缩略图,那还不错,但是任何超过几kB的大小都将是战利品中的痛苦。