Node.js将图像通过管道传输到内存并显示

时间:2018-09-13 01:30:15

标签: node.js

我正在制作一个Node.js / Electron应用程序,该应用程序下载并显示图像。我正在使用请求从互联网下载图像。我想将此图像保存在内存中并显示它而不将文件保存在本地硬盘驱动器上。我知道可以通过将<img src="url">插入DOM来完成我在这里要问的事情,但这是我的代码的简化版本,而我要完成的工作无法做到这一点。

var image = fs.createWriteStream(?); // Is there anyway to save the image to memory?
request(url).pipe(image);
$('img').exampleScriptToSetImage(image); // And is there any way to display that image in a element without saving it to the local disk and loading its path?

1 个答案:

答案 0 :(得分:2)

的确!您可以将请求的图像数据通过管道传输到concat流中,将缓冲区转换为base64,然后将base64编码设置为图像源。

var path = require('path')
var request = require('request') // or hyperquest, simple-get, etc...
var concat = require('concat-stream')

var image = request(url)
image.pipe(concat({ encoding: 'buffer' }, function (buf) {
  var ext = path.extname(file.name).slice(1) // assuming you have the file name
  if (ext === 'svg') ext = 'svg+xml'
  var src = 'data:image/' + ext + ';base64,' + buf.toString('base64')
  var img = document.createElement('img')
  img.src = src
  document.body.appendChild(img)
})