【问题标题】:NodeJS writeStream empty fileNodeJS writeStream 空文件
【发布时间】:2012-11-12 04:24:05
【问题描述】:

我正在尝试使用 nodeJS 将处理后的图像保存在 base64 字符串中。

var buff = new Buffer(base64data,'base64');
console.log(base64data);

var stream = fs.createWriteStream('/path/to/thefile.png');
stream.write(buff)
stream.end()

但是,生成的文件是空的。

当我将console.log(base64data);的输出并在本地解码时,它会生成一个有效的png二进制文件,那么为什么文件是空的?

该文件是一个 3600x4800 像素的 png 文件(即它很大),这可能是一个因素吗?

另外,我也尝试了writeFile,但没有运气。

是的,fs 是 require('fs')

谢谢

【问题讨论】:

  • 代码是有效的,我可以让它在本地工作,尝试记录buff,因为这是你试图写的(不是base64data)到文件中,看看是否有转换它的问题。此外,您可能想尝试检查您的权限。

标签: node.js filesystems png


【解决方案1】:

你的 stream.end() 太快了,因为什么都没有写。记住它是异步函数。

var buff = new Buffer(base64data,'base64');
console.log(base64data);

var stream = fs.createWriteStream('/path/to/thefile.png');
stream.write(buff);
stream.on("end", function() {
  stream.end();
});

【讨论】:

  • 我正在使用 mkpdf 库,这对我来说根本不起作用,因为如果未调用 end(),则永远不会到达结束事件。使用 mkpdf 时,我实际上是在创建 writestream,然后将其传递给库,然后调用 pipe() 方法。
【解决方案2】:

更好:

var buff = new Buffer(base64data,'base64');
console.log(base64data);

var stream = fs.createWriteStream('/path/to/thefile.png');
stream.write(buff);
stream.end();
stream.on('finish', () => {
     //'All writes are now complete.'
});
stream.on('error', (error) => {...});

【讨论】:

  • 你能提供一些关于你添加的行的细节吗?
  • 这不是更好;它不起作用。您在等待事件之前输入stream.end()。
猜你喜欢
  • 2021-02-11
  • 2016-06-04
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多