【问题标题】:Cannot convert blob to image无法将 blob 转换为图像
【发布时间】:2015-08-07 19:04:53
【问题描述】:

我有一个数据库,其中图像保存为 blob。现在,我想将此 blob 数据转换为图像文件。

所以我做了这段代码,但它没有给出任何结果

$sql_icon = "SELECT $off_table.icon,$off_table.id
            FROM $off_table,$cnt_table,$ctg_table
            WHERE  $off_table.id = $cnt_table.id
            AND $off_table.id = $ctg_table.id
            AND ".$cond_api."
            AND ".$cond_nt."
            AND ".$cond_cnt."
            AND ".$cond_ctg;


$result_icon = mysql_query($sql_icon);

while($row = mysql_fetch_array($result_icon)) 
    {
       $image = $row["icon"];
       $id = $row["id"];

       $file = fopen("./image/".$id.".jpg","w");
       fwrite($file, base64_decode($image));
       fclose($file);
    }

问题是,我正在获取文件但没有扩展名,如果我将它们重命名为“.jpg”扩展名,那么它会显示“没有可用的预览”

注意:

图片通过这种方式存入数据库

$sql = "INSERT INTO aw_offers_v2
                    (
                    id,name,description,payout_type,
                    payout,expiration_date,creation_date,preview_url,
                    tracking_url,categories,countries,countries_short,
                    api_key,network_id, icon,icon_size)
                    VALUES
                    ('$id','$name','$description','$payout_type',
                    '$payout','$expiration_time','$creation_time','$preview_url',
                    '$tracking_url','$categories','$countries','$countries_short',
                    '$api','$api_url','".mysql_real_escape_string(file_get_contents($cover_image_src))."','".strlen(file_get_contents($cover_image_src))."')";

如果我写这段代码

echo '<img src="data:image/jpeg;base64,'. base64_encode($image).'" />';

然后我可以正确地看到图像。这意味着图像已成功保存。

但我不能将它们作为文件存储在文件夹中。

【问题讨论】:

  • 图片是如何存储的?
  • 图像存储为 blob
  • 图片是base64_encoded在你存储之前吗?
  • 我的意思是,你能告诉我们将图像写入数据库的代码吗?
  • 好的,没问题。给我两分钟

标签: php blob


【解决方案1】:

通过查看您的代码,您不会base64_encode 您的图像。

所以你可以这样做:

 fwrite($file, $image);

您只需要base64_encode 显示图像时将数据放在&lt;img 标签的src 属性内。

还请注意,您可以简化这一点:

$file = fopen(...);
fwrite($file, $image);
fclose($file);

单行:

file_put_contents("./image/{$id}.jpg", $image);

【讨论】:

  • 这是正确的。我还强烈建议您与您的客户聊天,讨论如何存储图像。数据库不是解决此问题的正确工具。
  • 伙计们,让我清除它.... 我的客户将图像保存在 blob 中。然后在一个面板中,他选择了一些条件并单击一个按钮以将数据保存在 csv 中并获得一个包含图像文件的 zip 文件。这就是为什么我需要将法师从 blob 保存到文件中,然后从中创建一个 zip。这就是我这样说的所有原因。他只是想这样......我告诉他将路径保存在db中,但他想要这样
  • 在这种情况下是安全的,因为$id 来自数据库,但值得指出的是,这通常需要去污点。如果此值可能来自用户,则该写入操作可能会无意中产生破坏性 - 您只需要一些 .. 目录遍历,您就可以在 Web 服务器具有写入权限的任何位置进行写入。
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 2014-01-21
  • 2019-11-18
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2022-11-21
相关资源
最近更新 更多