Node.js FS写了一个有点大的图像文件?

Node.js FS write a somewhat large image file?

因此,为了解决 canvas toDataUrl 安全问题,我将在服务器上请求一个图像并将其写入我的服务器,以便为客户端提供我托管的图像版本。

我请求具有适当权利的图像。

var imageId = shortid.generate();

fs.writeFile('./externalImages/'+imageId+'.jpg', 'http://upload.wikimedia.org/wikipedia/commons/5/58/LeBron_James_3409937543.jpg', function (err) {
  if (err) throw err;
  console.log('It\'s saved!');
});

图像保存但通常已损坏。

我假设我需要在完成之前创建一个流或缓冲数据,因为我认为它在所有数据写入之前就完成了。

我的问题是如何创建流或缓冲区以便写入整个文件然后调用完成?

fs.writeFile 的第二个参数是字符串或缓冲区,因此您实际上是在写入字符串 'http://url',这会导致图像损坏。相反,您想将对 url 的请求的响应通过管道传输到文件,例如

http.get(url, function (res) {
  res.pipe(fs.createWriteStream('./externalImages/'+imageId+'.jpg'));
});