【发布时间】:2010-07-15 20:52:02
【问题描述】:
我需要向客户端发送一个base64 编码字符串。因此,我在服务器上打开并读取图像文件,对其进行编码并将该数据与image/jpeg 内容类型一起发送到浏览器。
php 中的示例:
$image = $imagedir . 'example.jpg';
$image_file = fopen($image, 'r');
$image_data = fread($image_file, filesize($image));
header("Content-type: image/jpeg");
echo 'data:image/jpeg;base64,' . base64_encode($image_data);
客户端,我来电:
var img = new Image();
img.src = "http://www.myserver.com/generate.php";
img.onerror = function(){alert('error');}
$(img).appendTo(document.body);
由于某种原因,这不起作用。 onerror 总是触发。例如,观看 FireBug Network task,告诉我我收到了正确的标头信息和传输字节的正确值。
如果我以Content-type: text/plain 发送该数据,它可以工作,base64 字符串会显示在浏览器中(如果我直接调用脚本)。将该输出复制并粘贴到 <img> 元素的 src 中会按预期显示图像。
我在这里做错了什么?
解决方案
感谢Pekka 指出我的错误。您不需要(您不能!)以这种方法将该二进制图像数据编码为 base64 字符串。如果没有 base64 编码,它就可以工作。
【问题讨论】:
-
看起来您应该直接将
src属性的值设置为响应文本(即img.src = "data:image/jpeg;base64,..."... 此处的右侧可能是 Ajax 调用的返回值) - 否则浏览器将尝试从您设置的 URL 请求图像,这将不起作用,因为它直接返回data:image...而不是图像字节。 -
我不想要
ajax call的开销。我需要它尽可能快。例如,为了获得某种“响应”,我需要一个有效的图像来检查宽度。
标签: php javascript jquery base64