【问题标题】:Make nodejs request image to external site and send back to front end使nodejs请求图像到外部站点并发送回前端
【发布时间】:2018-01-10 18:02:04
【问题描述】:

我在服务器上使用 nodejs。 我需要在 url 中执行后端请求以获取 jpg、png... 图像并将响应发送到我的 angular 前端。

我尝试了下一个,但它不起作用。 当我使用 Postman 进行测试时。屏幕上只显示文本。没有图片。

我做错了什么?

//节点

var request=require('request');
app.get('/foto', function(req, res, next) {
            request.get('https://firebasestorage.googleapis.com/v0/b/ortototem.appspot.com/o/Photos%2F51%2FFoto?alt=media&token=XXXXX',
                function(err,resp,body){
              if(err) {
                next(err)
              }else{ 
                 if(resp.statusCode !== 200 ) {
                    console.log(resp)
                 } else res.send(resp)
              }
        })

【问题讨论】:

  • 显示的是什么文本而不是图像?可以发一下吗?
  • 出于好奇:为什么您希望后端从外部 url 获取图像,而不是直接从前端获取?
  • 邮递员也不会知道正在返回图像,因为您的端点没有扩展名。它会吐出图像的原始数据。即使确实有扩展名,我也不确定 Postman 是否可以处理非文本回复
  • @RaphaMex 我正在尝试使用我的后端节点服务器作为代理从 firebase 获取图像。如果我直接从前端执行此操作,则会收到 CORS orgin 错误。
  • @Xavier 这是 Firebase 存储中图片的网址

标签: angularjs node.js


【解决方案1】:

由于您的端点没有扩展名,因此您必须在响应中设置 Content-Type 标头以匹配您获取的图像的 mime 类型。可能是通过从您的谷歌存储响应或其他东西中以编程方式检测它。您还需要确保传入和渲染二进制数据为 Buffer 类型。

例如:

request.get('https://firebasestorage.googleapis.com/v0/b/ortototem.appspot.com/o/Photos%2F51%2FFoto?alt=media&token=YOUR_TOKEN', { encoding: null }, function(err,resp) {
  if(err) {
    next(err)
  } else {
    if(resp.statusCode !== 200 ) {
      console.log(resp)
    } else {
      res.contentType(resp.headers['content-type']);
      res.end(resp.body, 'binary');
    }
  }
});

没有这个 Postman 或任何浏览器都不会知道它是一个图像或它是什么类型的图像,因此它会假定它是纯文本。

这里的三个重要项目是:

  1. request 上指定encoding: null 选项,以便将正文作为缓冲区加载
  2. res.contentType 设置为 Firebase 响应中的内容类型
  3. 使用res.end(resp.body, 'binary') 在快速响应中指定二进制数据

【讨论】:

  • 嗨,它不起作用。这是正确的网址:firebasestorage.googleapis.com/v0/b/ortototem.appspot.com/o/… 如果您过去进入 postmon,则图像显示正确
  • 嘿@LuizAlves,我刚刚更新了我的答案。它在我的机器上使用一个迷你快递脚本。让我知道这是否有效!
  • 非常感谢泽维尔先生。我被它困住了。你救了我。
猜你喜欢
  • 2016-12-15
  • 2020-05-11
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多