【问题标题】:Nodejs save binary file using streamNodejs使用流保存二进制文件
【发布时间】:2015-02-08 17:15:14
【问题描述】:

大家好,

我正在尝试使用流将数据对象保存到 Excel 文件中。但是保存后无法打开文件。

同时我使用fs.writeFile保存同一个数据对象,Excel文件可以正常打开查看。

请看下面的代码。当我比较这两个文件时,使用 Stream 保存的文件大约大 2kb,如果我删除“二进制”参数,fs.writeFile 也将不起作用,所以我认为“二进制”正在发挥作用。

你能告诉我我在这里缺少什么吗?提前致谢!

var fs = require('fs'),
    path = 'temp',
    Stream = require('stream'),
    rs = new Stream.Readable({ objectMode: true }),
    outFileStream,
    result = generateExcelData();

    rs.push(result);
    rs.push(null);
    outFileStream = fs.createWriteStream(path + 'stream.xlsx');//stream.xlsx cannot be opened 
    rs.pipe(outFileStream);

    fs.writeFile(path + 'stream2.xlsx', result, 'binary');//stream2.xlsx can be opened without any issue

【问题讨论】:

  • 你为什么使用流(甚至在objectMode 中)只是为了将结果写入文件?为什么不直接写数据呢?另外,result 是什么值?缓冲区?一个字符串?还有什么?
  • @mscdex:我想使用流的原因是因为数据可能非常大——它是一个 json 对象数组。有几次我的内存超出错误。所以我试图使用流。谢谢
  • 您可以考虑使用JSONStream.stringify() 并将每个数组元素推送给它,而不是生成一个大型数据集。然后将其传送到outFileStream
  • 谢谢,我得到了它的以下功能:buffer = new Buffer(result, 'binary');

标签: node.js excel stream binary filestream


【解决方案1】:

我意识到我错过了这个:

buffer = new Buffer(result, 'binary');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多