Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从外部web服务获取图像并将其传递给另一个express js路由_Javascript_Node.js_Web Services_Rest_Express - Fatal编程技术网

Javascript 从外部web服务获取图像并将其传递给另一个express js路由

Javascript 从外部web服务获取图像并将其传递给另一个express js路由,javascript,node.js,web-services,rest,express,Javascript,Node.js,Web Services,Rest,Express,我有一个外部web服务,它返回图像 我有一个叫做外部web服务的node express路由 我正在努力将外部web服务的返回对象(即图像)传递为express route的返回对象 下面是这个例子,我试图从外部URL获取图像并按原样传递它。。它不起作用,有人能帮我知道怎么做吗 exports.getImage = function (req, res) { var http = require('http'); var options = { host:

我有一个外部web服务,它返回图像

我有一个叫做外部web服务的node express路由

我正在努力将外部web服务的返回对象(即图像)传递为express route的返回对象

下面是这个例子,我试图从外部URL获取图像并按原样传递它。。它不起作用,有人能帮我知道怎么做吗

exports.getImage = function (req, res) {

    var http = require('http');


    var options = {
        host: 'http://www.gettyimages.co.uk',
        path: '/CMS/StaticContent/1391099215267_hero2.jpg',
        method: 'GET',
        headers: {
            "content-type": "image/jpeg"
        }
    };

    var request = http.request(options, function(response) {
        var imagedata = '';
        response.setEncoding('binary');

        response.on('data', function(chunk){
            imagedata += chunk
        });

        response.on('end', function() {
            console.log('imagedata: ', imagedata);
            res.writeHead(200, {'Content-Type': 'image/jpeg' });
            res.send(imagedata);
        });
    }).on("error", function(e) {
        console.log("Got error: " + e.message, e);
    });

    request.end();

};

现有代码的问题在于,当您向其传递字符串时,
res.send()
默认为非二进制编码,因此您的数据最终将因此受到损坏

第二,你最好只是流式传输数据,这样你就不会每次都在内存中缓冲整个图像。例如:

var request = http.get(options, function(response) {
  res.writeHead(response.statusCode, {
    'Content-Type': response.headers['content-type']
  });
  response.pipe(res);
}).on("error", function(e) {
  console.log("Got error: " + e.message, e);
});
最后,
host
值是错误的,它应该只是主机名(没有方案):
www.gettyimages.co.uk
。此外,在请求的
标题中设置
“content type”:“image/jpeg”
没有意义(可以删除),因为您的请求中没有发送jpeg图像