node.js表示将外部图像推送到客户端

node.js express external image push to client

本文关键字:客户端 图像 外部 js 表示 node      更新时间:2023-09-26

我在这方面遇到了很大的困难。如果我有一个外部图像url。例如这是来自IMDb.com的图片url,http://ia.media-imdb.com/images/M/MV5BMTMyMzA5ODIzMV5BMl5BanBnXkFtZTcwNzE2NDM1Mw@@_V1_SY317_CR52,0214317_.jpg。如何将此图像发送到客户端?

目前,我正在做:

res.write('<img src="/http://ia.media-imdb.com/images/M/MV5BMTMyMzA5ODIzMV5BMl5BanBnXkFtZTcwNzE2NDM1Mw@@._V1_SY317_CR52,0,214,317_.jpg"></img>');

但它并没有显示出来,我只是得到了一个破碎的图像。

更新:

我最终这样做是为了让它发挥作用:

var url = http://ia.media-imdb.com/images/M/MV5BMTMyMzA5ODIzMV5BMl5BanBnXkFtZTcwNzE2NDM1Mw@@._V1_SY317_CR52,0,214,317_.jpg; 
var loadBase64Image = function (url, callback) {
    var request = require('request');
        request({url: url, encoding: null}, function (err, res, body) {
        if (!err && res.statusCode == 200) {
            var base64prefix = 'data:' + res.headers['content-type'] + ';base64,'
            , image = body.toString('base64');
                if (typeof callback == 'function') {
                 callback(image, base64prefix);
                }
            } else {
        throw new Error('Can not download image');
        }
});
}; 
loadBase64Image(imageUrl, function (image, prefix) {
    res.write('<img src="' + prefix + image + '"/>');
});

IMDB返回该图像URL的403(禁止)HTTP状态。我的猜测是IMDB正在根据请求的推荐人屏蔽图像。这通常用于防止与资源的深度链接,这样一个网站就不能从其他网站"窃取"带宽/内容。即使这个JSFiddle也显示了一个损坏的图像,但直接在浏览器中加载图像URL是有效的。

<img src="http://ia.media-imdb.com/images/M/MV5BMTMyMzA5ODIzMV5BMl5BanBnXkFtZTcwNzE2NDM1Mw@@._V1_SY317_CR52,0,214,317_.jpg"/>

解决方案是不使用IMDB图像,因为他们不提供公共链接。

试试这个:
res.write('<img src="http://ia.media-imdb.com/images/M/MV5BMTMyMzA5ODIzMV5BMl5BanBnXkFtZTcwNzE2NDM1Mw@@._V1_SY317_CR52,0,214,317_.jpg">');

图像标签是自动关闭的。没有结束标记。