当前位置: 首页 > 面试题库 >

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

秦景福
2023-03-14
问题内容

我正在使用以下代码从我的 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);

问题答案:

使用关键字_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中。



 类似资料:
  • 我想采取一个当前的base64编码的图像,并使用一个简短的哈希说“84dskh”,以“加密”的图像到另一个完全有效的base64编码图像。 原始图像不必经过base64编码,最终我想要原始图像的加密图像,但它仍然是一个可以在img标记中显示的有效图像:。 最好使用JavaScript。

  • 问题内容: 我们有一个MySQL InnoDB表,其中包含约10列由base64编码的小型javascript文件和由base64编码的png(小于2KB大小)图像。 插入的次数很少,但读取次数却很多,但是输出会在Memcached实例上缓存几分钟,以避免后续的读取。 现在,我们正在使用这些列,但是我想知道在性能或快照备份方面切换到数据类型是否有优势。 我的搜索挖掘表明,和我的情况接近相同的,因为

  • 我使用下面的脚本从MongoDB中获取JSON文件,对其进行解析,然后将其插入到Oracle表中。 > 该脚本可以正确地将所有值插入到Oracle表中。这包括值Photo,它是一个base64 formate的图像,它比32KB大得多。 表Appery_Photos中的列Photo是CLOB类型,而列DecodedPhoto是BLOB类型。 问题在于行,我用它将CLOB解码为BLOB。函数base

  • 问题内容: 我的Express应用程序正在从浏览器中接收base64编码的PNG(使用toDataURL()从画布生成)并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。 问题答案: 我认为您正在转换的数据比您需要的更多。一旦使用正确的编码创建了缓冲区,您只需要将缓冲区写入文件即可。 new Buffer(…,’base64’)通过将输入解释为base64编

  • 我正在用base64编码的PNG创建一个Blob。。。 我不知道我做错了什么,但是blob的内容是一些东西,但不是我想要的png。 thx提前... [更新] 我认为Base64生成的字节数。解码是可以的。文件大小为1003字节,解码也产生1003字节。 [更新2]以下是我谈论的来源:https://github.com/MikeMitterer/AndroidIconGenerator.DART