从数据库显示base64图像

时间:2015-05-25 19:59:21

标签: php base64

我的代码有问题吗?我问,因为我无法在浏览器中显示图像。我试图将base64图像解码为png,但我还是无法显示图像。我的网址格式如下: 数据:图像/ JPEG; BASE64,iVBORw0kGgoAAAANSUhgAAAeAA ...

我的PHP代码

    //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做些什么吗?

1 个答案:

答案 0 :(得分:1)

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

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

应该是您所需要的一切。根本没有解码通话。请注意,您无法将原始二进制文件转储到数据uri中,即使您希望 - 它将随机(并且自然地)包含"和其他html元字符,从而引入html注入问题。您必须htmlspecialchars()二进制字符串,然后确定是否存在编码类型raw-binary-with-html-characters-escaped

相关问题