node中如何读取远程的图片并显示出来?

发布于 2022-09-01 22:22:11 字数 711 浏览 10 评论 0

用的是express框架,读取https://pin.aliyun.com/get_img?sessionid=1这个图片的内容,用http://localhost/identify 把图片显示出来,代码如下,运行后图片显示框框,没显示出图片:


router.get('/identify',function(req,res,next){
    var opts={
        url:'https://pin.aliyun.com/get_img?sessionid=1'
    }
    request.get(opts, function (err, response, body) {
        var type = response.headers["content-type"];
        res.writeHead(200,{"Content-Type":type});
        res.write(body);
        res.end();
    })
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

皓月长歌 2022-09-08 22:22:11

多加点日志打印调试一下

悲喜皆因你 2022-09-08 22:22:11

这个问题是使用request导致的,看request的源码中readResponseBody处理的部分,有一段这个

  if (self.encoding !== null) {
      console.log('response.body.toString ');
    response.body = response.body.toString(self.encoding)
  }

如果self.encoding是undefined时候,也进入了这段逻辑,导致编码错误了

因此调用的时候,必须强制指定encoding为null,文档中也有说明

encoding - encoding to be used on setEncoding of response data. If null, the body is returned as a Buffer. Anything else (including the default value of undefined) will be passed as the encoding parameter to toString() (meaning this is effectively utf8 by default). (Note: if you expect binary data, you should set encoding: null.)

改成这样就行了

router.get('/identify',function(req,res,next){

var opts={
    url:'https://pin.aliyun.com/get_img?sessionid=1',
    encoding:null
}
request.get(opts, function (err, response, body) {
    var type = response.headers["content-type"];
    res.writeHead(200,{"Content-Type":type});
    res.write(body);
    res.end();
})

})

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文