将base64图像插入php中的mysql表

时间:2017-05-18 00:32:20

标签: php mysql html5 html5-canvas base64

我正在尝试将从html5 canvas生成的图像保存到mysql数据库中。我知道如何以base64格式插入图像,但我了解到base64将占用33%的存储空间,因此我想将其保存为BLOB或文件,但我遇到了这两种方法的问题。我从另一个页面的ajax方法接收base64字符串,并使用$ _POST [“image”]来获取它。 我的第一次尝试是将图像保存为blob:

    $data = $_POST["image"];
    $data = str_replace('data:image/png;base64,', '', $data);
    $data = str_replace(' ','+',$data);

    $data = base64_decode($data);
    $sql=mysql_query("INSERT INTO capimages(image)VALUES('$data')");

但如果我打开桌子就没有插入任何内容。

为了将其保存为文件路径,我不太清楚file_put_content或imagepng如何将文件保存在数据库中,因为没有带有insert语句的sql查询。我尝试了下面的代码,但执行后我在表中找不到任何内容:

 define('upload_dir', 'images/');
    $img = $_POST["image"];
    $img = str_replace('data:image/png;base64,', '', $img);
    $img = str_replace(' ', '+', $img);
    $data = base64_decode($img);
    $file = uploaddir . uniqid() . '.png';
    $success = file_put_contents($file, $data);

在我收到base64格式的图片后,有人可以告诉我如何将它作为BLOB或文件路径保存到表中吗? 此外,如果我不期望我的网站有大量的音量,那么它真的比base64格式的存储空间大33%吗?

1 个答案:

答案 0 :(得分:2)

通常,您不希望将图像存储在关系数据库中。

但是你想要的。

这是使用MySQLi(mysqli manual)存储blob的代码:

首先:创建一个表来存储图像。

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `content` blob NOT NULL
)

然后:

<?php
$host = 'localhost';
$user = 'root';
$pass = 'root';
$db_name = 'test';

$base64_data = $_POST['base64_data'];

$link = mysqli_connect($host, $user, $pass, $db_name);

$stmt = mysqli_prepare($link, "INSERT INTO test (id, content) VALUES (?, ?)");

$stmt->bind_param('ib', $id, $content);

$id = 1;

$content = null;

//$base64_data = base64_decode(base64_encode(file_get_contents('3413983627135443.jpg')));
//$stmt->send_long_data(1, $base64_data);
$stmt->send_long_data(1, base64_decode($base64_data));

mysqli_stmt_execute($stmt);
printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));
mysqli_stmt_close($stmt);

请勿使用MySQL(原始)扩展程序:intro.mysql