【问题标题】:Get image from external web service and pass it to another express js route从外部 Web 服务获取图像并将其传递给另一个 express js 路由
【发布时间】:2014-11-09 20:52:02
【问题描述】:

我有一个外部网络服务,它返回图像。

我有调用该外部 Web 服务的节点快速路由。

我正在努力将外部 Web 服务的返回对象(即图像)作为快速路由的返回对象传递

这是这个例子,我正在尝试从外部 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();

};

【问题讨论】:

    标签: javascript node.js web-services rest express


    【解决方案1】:

    现有代码的问题是 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。此外,在请求 headers 中设置 "content-type": "image/jpeg" 没有意义(并且可以删除),因为您没有在请求中发送 jpeg 图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多