我的代码有问题吗?我问这个问题是因为我无法在浏览器中显示图像。我试图将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 + "¬e=" + value3);
}
所以,我可以再问我应该为xmlhttp.setRequestHeaderPart做什么?
是的,您正在将base64数据解码为原始二进制,但告诉浏览器它仍然是base64。这是行不通的。
echo '<img src="data:image/png;base64,' . $row['url'] . '" />';
应该是您所需要的。根本没有解码调用。注意,即使您想要这样做,也不能将原始二进制文件真正转储到数据uri中—它将随机(并且自然地)包含"
和其他html元字符,从而引入html注入问题。你需要htmlspecialchars()
二进制字符串,然后找出是否有编码类型raw-binary-with-html-characters-escaped