我正在努力从blob中提取图片 当前无法显示图像,因为它包含错误 当我下载它 解释JPEG图像文件时出错(不支持的标记类型0x5c) 并尝试通过“linux shell”
来识别文件是什么并获得此信息[无] $ file PICTURE.bin PICTURE.bin:JPEG图像数据 识别:不支持的标记类型0x5c`PICTURE.bin'@ error / jpeg.c / JPEGErrorHandler / 322
我试图通过文本编辑器打开它,并在开始时得到这个奇怪的东西,而不是JPEG或JPG。它在图像文件的开头显示类似“JFIF”的内容 我已经尝试了一个PHP脚本来提取图像并直接从phpmyadmin下载它没有运气 我正在使用的剧本是“我的不是我在互联网上找到它”:
<?php
// ************* MODIFY THESE FOR YOUR SERVER AND DATABASE SETTINGS *************
// y = first letter in yourdomain.com
// o = second letter in yourdomain.com
$basedir = '/home/zzz/public_html/z/'; // Needs trailing slash
$host = 'localhost';
$user = 'zz'; //(user information)
$password= 'zz'; //(password information)
$dbname = 'zzz';
$type = 'jpg';
$blob_id = 'APLT_ID';
$blob_data = 'PICTURE';
$blob_table = 'zzzz';
// ************************************************** ***************
$db = mysql_connect($host, $user, $password) or die("Could not connect: " . mysql_error());
mysql_select_db($dbname, $db);
$sql = "SELECT $blob_id, $blob_data FROM $blob_table";
echo $sql;
$result = mysql_query($sql);
header('Content-Type: text/html; charset=utf-8');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$id = $row["$blob_id"];
$data = $row["$blob_data"];
$file = "$basedir$id.$type";
echo "Looking for File: $file<br>";
if (!file_exists($file)) {
$fp=fopen($file,"w");
echo "Opening File: $file<br>";
fwrite($fp,$data);
echo "Writing File: $file<br>";
} else {
echo "Skipping File: $file<br>";
fclose($fp);
echo "Closeing File: $file<br>";
}
sleep(1);
}
mysql_free_result($result);
?>
可以对图像进行编码吗?
因为在发布和寻求帮助之前,我只是浪费了2天试图弄清楚这件事
答案 0 :(得分:0)
图像是二进制数据,需要以二进制模式存储,不需要对换行符进行任何更改。更改代码以在二进制模式下打开/创建文件,如果数据库中的数据有效,则代码应该有效。
$fp=fopen($file,"wb");
答案 1 :(得分:0)
如果您正在寻找 MySQL 查询,试试这个。
以 root
身份登录到您的 MySQL 服务器
首先检查MySQL允许写入输出文件的位置:
mysql> SELECT @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/ |
+---------------------------+
1 row in set (0.00 sec)
我的系统只能将文件解压到 /var/lib/mysql-files/
中。如果你什么也没得到,你可以把文件保存在文件系统的任何地方。
要提取文件,请运行以下 SQL 查询:
SELECT blob_column FROM table WHERE id='some_id' INTO DUMPFILE "/var/lib/mysql-files/file.jpg";
注意:使用 DUMPFILE
。不要不要使用OUTFILE
。这会给你一个损坏的输出文件。