【发布时间】:2015-11-12 03:52:05
【问题描述】:
我正在使用这个
$.ajax({
type: "GET",
url: 'template/bump1/purse.png',
datatype:"image/png",
success: function (data) {
var reader = new FileReader();
reader.onload = function (e) {
var img = document.getElementById("CaptchaImg");
img.src = e.target.result;
};
reader.readAsDataURL(data);
//$('#CaptchaImg').attr('src', data);
}
});
下载图像,它以二进制形式输出,如下所示
node.js 将其返回为
WriteHeaderMode('image/png', res, 200);
res.end(data, 'binary');
但是现在,我如何将其放入图像标签并将其显示为图像。注意:我不希望返回数据为 base64 编码,它必须是二进制的。不过,我可以在客户端将二进制文件转换为 base64。
当我将它传递给readAsDataURL 时,它会显示TypeError 异常。
谢谢
编辑
var img = document.getElementById("CaptchaImg");
var reader = new FileReader();
reader.onload = function(e) {
//img.src = e.target.result;
$("body").html(e.target.result);
};
reader.readAsDataURL(new Blob([data]));
这似乎将其转换为base64编码,以data:application/octet-stream;base64,开头但不显示图像...
【问题讨论】:
-
我没有研究这么多,但我猜因为
application/octet-stream基本上是在说“下载我”,你可以尝试直接做.replace("application/octet-stream", "image/png");。值得一试哈哈 -
我试过了,但是没用。
-
好吧,至少我知道我并没有因为建议而疯狂。但与其试图解决这个问题,不如尝试重新思考逻辑?只需将
src属性设置为图像 URL,您将启动图像的下载,而不是 AJAX,只需这样做 -
我不想这样做,因为我这里可能没有它,但我也发送了一个
FormData()作为带有图像的附件。即我正在尝试在同一个 ajax 调用中上传和下载图像。 -
我尝试了您的解决方案,但我使用了 angular $http,并将 responseType 设置为“blob”。然后它与您的解决方案一起使用,但使用
reader.readAsDataURL(data.data);。实际数据是响应对象的属性。我不确定这是否只是 jQuery 和 Angular 工作方式的不同。