SQL

将base64编码的图像另存为BLOB到服务器端数据库

发布于 2021-05-10 21:10:11

我正在使用以下代码从我的 Android应用程序中 拍照:

if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK){
        photo = (Bitmap) data.getExtras().get("data");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        photo.compress(Bitmap.CompressFormat.JPEG, 40, baos);
        byte[] photoByte = baos.toByteArray();
        encodedImage = Base64.encodeToString(photoByte,Base64.DEFAULT);
    }

我正在encodedImage通过POST将此字符串发送到我的PHP服务器,并将其接收到$encodedImage。我有一个数据库,其中有一个myImagetype字段MEDIUMBLOB。我试图保存在encodedimagemyImage但它被保存为损坏的图像。我尝试将另存为,base64_decode($encodedImage)但是无论如何也无法正常工作。

我想做三件事:

  • 将图像保存到服务器端数据库(BLOB)

  • 显示图像到网页

  • 将其发送回Android应用。

我在 理解 上述任务所需的不同格式的图像 转换 时遇到了问题。

对于我当前的项目,我不想将我的图像保存到文件夹中并提供指向数据库的链接,因此该选项对我来说是关闭的。

我的PHP代码保存图像:

$baseImage = $_POST['baseImage'];
$blobImage = base64_decode($baseImage);
$query = "INSERT INTO `complaints`(`myImage`,...) VALUES ('$blobImage',...)"
$result = mysqli_query($conn,$query);
关注者
0
被浏览
124
1 个回答
  • 面试哥
    面试哥 2021-05-10
    为面试而生,有面试问题,就找面试哥。

    使用关键字_binary前缀SQL。

    $query = "INSERT INTO `complaints`
    (`myImage`,...)
    VALUES (_binary'".addcslashes($blobImage, "\x00\'\"\r\n")."',...)"
    

    另外,使用CURL设置测试环境,以便您可以反复向其抛出base64编码的图像。这将是您需要大量调试的情况。

    <?php
    $f = fopen('sample.jpg.base64.txt', 'w');
    $i = fopen('sample.jpg', 'r');
    if (!$i) { die("cannot open sample.jpg\n"); } 
    $bytes = '';
    while ( ! feof($i)) { 
        $bytes .= fread($i, 4096);
    }
    fclose($i);
    fputs($f, base64_encode( $bytes ) );
    fclose($f);
    

    然后使用curl重复发布它并调试PHP

    curl -X PUT "http://localhost/myimport.php" -F "baseImage=@./sample.jpg.base64.txt"
    

    调整您的PHP脚本,只需将数据写到硬盘驱动器上的文件中,然后在其中进行检查即可。写出编码和解码的多个版本。

    就个人而言,我不会对从Android到PHP的字节进行base64编码,但我 会将 base64编码在mysql中。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看