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

时间:2016-03-03 23:11:59

标签: php android sql json android-volley

我是新来的,所以请耐心等待。

问题:如何通过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读取数组并将二进制字符串转换为位图图像。

2 个答案:

答案 0 :(得分:0)

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

  1. 从数据库中返回一行

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

答案 1 :(得分:0)

JSON无法处理原始二进制数据,您需要以某种方式对其进行编码,以及&#39;如何&#39;几乎是规范的基础64。

在服务器端使用它:

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

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

那就是说,我同意这个问题的其他意见:

  1. 文件应存储在文件系统中,并且只存储在数据库中。
  2. 您可能应该通过单独的简单HTTP请求提供图像,而不是将其传递给JSON。
    • 值得注意的是,以文本安全的方式编码二进制数据总是使文件大小膨胀,而对于base64,它大约增加了30%。
    • 可以并行处理单独的请求。
  3. 如果你只是以这种方式存储和提供小图标或缩略图,那么太差了,但是任何超过几KB的东西都会很痛苦战利品。