将 base64 图像插入 mysql table in php
insert base64 image to a mysql table in php
我正在尝试将 html5 canvas 生成的图像保存到 mysql 数据库中。我知道如何以 base64 格式插入图像,但我了解到 base64 将多占用 33% 的存储空间 space,因此我想将其另存为 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')");
但是如果我打开 table 什么都没有真正插入。
保存为文件路径,我不太明白file_put_content或imagepng如何将文件保存到数据库中,因为没有sql查询和insert语句。我尝试了以下代码,但执行后我在 table:
中找不到任何内容
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 或文件路径保存到 table 吗?
另外,如果我不希望我的网站有很多容量,那么 base64 格式真的会多占用 33% 的存储空间 space 吗?
通常您不想将图像存储在关系数据库中。
不过如你所愿。
这是使用 MySQLi(mysqli manual) 存储 blob 的代码:
首先:创建一个 table 来存储您的图像。
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
我正在尝试将 html5 canvas 生成的图像保存到 mysql 数据库中。我知道如何以 base64 格式插入图像,但我了解到 base64 将多占用 33% 的存储空间 space,因此我想将其另存为 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')");
但是如果我打开 table 什么都没有真正插入。
保存为文件路径,我不太明白file_put_content或imagepng如何将文件保存到数据库中,因为没有sql查询和insert语句。我尝试了以下代码,但执行后我在 table:
中找不到任何内容 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 或文件路径保存到 table 吗? 另外,如果我不希望我的网站有很多容量,那么 base64 格式真的会多占用 33% 的存储空间 space 吗?
通常您不想将图像存储在关系数据库中。
不过如你所愿。
这是使用 MySQLi(mysqli manual) 存储 blob 的代码:
首先:创建一个 table 来存储您的图像。
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