从数据库显示base64图像


Display base64 image from database

我的代码有问题吗?我问这个问题是因为我无法在浏览器中显示图像。我试图将base64图像解码为png,但我仍然无法显示图像。我的URL格式如下:数据:图像/jpeg; base64, iVBORw0kGgoAAAANSUhgAAAeAA…

My php code


    //Connect to database
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("studioassessor_01") or die (mysql_error());
    $sql = "SELECT * FROM frame";
    $result = mysql_query($sql);
    if($result == FALSE){
       die(mysql_error());
    }
    while($row = mysql_fetch_array($result)){
        header("Content-type: image/png");
        echo '<img src="data:image/png;base64,' . base64_decode($row['url']) . '" />';
   }

在我测试了很多轮之后,我发现在ajax脚本中我的请求头部分有问题。请求头已将64位字符串的值更改为另一个值。

            function saveIt(){
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                        alert("Save successfully!");
                    }
                }
                var value1 = document.getElementById("url").value ;
                var value2 = document.getElementById("time").value;
                var value3 = document.getElementById("note").value;
                xmlhttp.open("POST", "insertFrame.php", true);
                xmlhttp.setRequestHeader("Content-type:image/png","application/x-www-form-urlencoded");
                xmlhttp.send("url="+ value1 + "&time=" + value2 + "&note=" + value3);
            }

所以,我可以再问我应该为xmlhttp.setRequestHeaderPart做什么?

是的,您正在将base64数据解码为原始二进制,但告诉浏览器它仍然是base64。这是行不通的。

echo '<img src="data:image/png;base64,' . $row['url'] . '" />';

应该是您所需要的。根本没有解码调用。注意,即使您想要这样做,也不能将原始二进制文件真正转储到数据uri中—它将随机(并且自然地)包含"和其他html元字符,从而引入html注入问题。你需要htmlspecialchars()二进制字符串,然后找出是否有编码类型raw-binary-with-html-characters-escaped