如何使用 Node 和 Express 正确提供动态图像?

Posted

技术标签:

【中文标题】如何使用 Node 和 Express 正确提供动态图像?【英文标题】:How to properly serve a dinamic image with Node and Express? 【发布时间】:2019-07-19 03:17:28 【问题描述】:

我有很多问题要实现我正在尝试的目标:

我想从该 URL http://tapas.clarin.com/tapa/1990/02/22/19900222_thumb.jpg 请求图像并将其显示在视图中,但我却将其显示在视图中:

实现我想要的正确方法是什么?

这是我的代码:

const app = require('express')();
var http = require('http').Server(app);
var rp = require('request-promise');
const fs = require('fs')


var url = 'http://tapas.clarin.com/tapa/1990/02/22/19900222_thumb.jpg'

app.get('/', (req, res) => 
   rp(url)
  .then(image => res.set('Content-Type', 'image/jpeg').send(image))
  .catch(err => res.send(err));
)

http.listen(3000, () => 
  console.log('listening on localhost:3000');
);

【问题讨论】:

您需要设置内容类型。 res.set('Content-Type', 'image/jpeg').send(image) 好的,现在它显示为黑屏,而不是我想要提供的图像:( 此链接可能对“***.com/questions/15772394/…”有所帮助 ***.com/questions/36337841/… ***.com/questions/39301227/… 如果你能找到一些东西,请尝试上面的链接。 【参考方案1】:

您从 request-promise 返回一个字符串,而不是缓冲区。设置编码:null,将为您提供一个可以发回的缓冲区。

const app = require('express')();
var http = require('http').Server(app);
var rp = require('request-promise');


var options = 
    url: 'http://tapas.clarin.com/tapa/1990/02/22/19900222_thumb.jpg',
    encoding: null


app.get('/', (req, res) => 
   rp(options)
  .then(image => 
      return res.end(image,'binary');
  )
  .catch(err => res.send(err));
)

http.listen(3000, () => 
  console.log('listening on localhost:3000');
);

【讨论】:

以上是关于如何使用 Node 和 Express 正确提供动态图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确设置 Node、Express 和 Angular2

请求新页面时如何将 AngularJS 路由与 Express (Node.js) 一起使用?

如何正确关闭 node-express 服务器?

如何使用 express .node 、 mongoose 和 ejs 删除对象

提供 node_modules 中文件的正确方法 [重复]

Node 和 Express:如何实现基本的 webhook 服务器