【问题标题】:PHP - Mysql blob to imagePHP - Mysql blob 到图像
【发布时间】:2017-08-16 08:21:04
【问题描述】:

我已经阅读了很多帖子,但由于某种原因它仍然无法正常工作。如标题所示,我想在存储在MySQL 中的网站中显示图像MEDIUM BLOB。这是上传图片的代码:

if (isset($_FILES["fileToUpload"]["tmp_name"])) {
    if(getimagesize($_FILES["fileToUpload"]["tmp_name"]) == FALSE)
        echo '<p style="color: red" >No file selected</p>';
    else {
        echo '<p style="color: red" >SELCETED</p>';
        $image= addslashes($_FILES["fileToUpload"]['tmp_name']);
        //$imageName= addcslashes($_FILES["fileToUpload"]['name']);
        $image = file_get_contents($image);
        $image = base64_encode($image);
    }
}

if (isset($_POST['trescText']) )
    $trescText=$_POST['trescText'];

if($titleText != ""&& $trescText != "") {
    $stmt = $conn->prepare("INSERT INTO blog (title,cykl,tresc, image) VALUES('$titleText','$cyklText','$trescText','$image')");
    $stmt->execute();
    header('Location: addPost.php');
}

$conn->close();

以及显示它的代码:

<?php
$stmt = $conn->prepare("SELECT image FROM blog WHERE id='98'");
$stmt->execute();
$stmt->bind_result($image);
while ($stmt->fetch()) {
    // echo '<img src="data:image;base64,'$image' "/>';
    echo '<img src="data:image/jpeg;base64,'.base64_encode($image) .'" />';
}
?>

问题是我得到的不是原始图像:

【问题讨论】:

  • 你对图像进行两次base64编码,一次是插入数据库,一次是发送到浏览器。
  • 除此之外还有一个警告:您的代码对 sql 注入攻击完全开放...
  • @arkascha:答案不会出现在 cmets 中。
  • @BoundaryImposition 在我看来这不是一个完整的答案,我只是暗示了原因。这就是为什么它当然应该是一个评论。完整的答案应包含固定代码。
  • 我建议您开始阅读您使用的工具的文档:php.net/manual/en/mysqli.quickstart.prepared-statements.php

标签: php html mysql blob


【解决方案1】:

您对其进行了两次 base64 编码:一次是在将其插入数据库时​​,另一次是在将其发送到浏览器时。

Base64 编码有明显的效果;也就是说,它转换数据。这不是暂时的。数据库中的数据是图像字节的 base-64 表示,这与您稍后使用 SELECT 提取的数据相同。

所以你只想做一次编码。

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2011-09-12
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多