将mysql数据库blob中的所有图像提取到目录

时间:2016-12-18 19:40:35

标签: php mysql sql encoding base64

我正在努力从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天试图弄清楚这件事

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。这会给你一个损坏的输出文件。