【问题标题】:Node writeFileSync encoding options for images图像的节点 writeFileSync 编码选项
【发布时间】:2016-07-07 16:15:10
【问题描述】:

我正在使用fs.writeFileSync(file, data[, options]) 保存从http.get(options[, callback]) 返回的文件

这适用于文本文件,但图像、pdf 等最终会被损坏。从我所做的搜索来看,这显然是因为fs.writeFileSync(file, data[, options]) 默认为 UTF-8

我尝试将编码设置为“二进制”、mime 类型和扩展名,但均无济于事。感觉我忽略了一些非常明显的东西,有人能指出我正确的方向吗?

提前谢谢你

更新

我正在通过电子运行它。我认为不值得一提,因为电子只是运行节点,但我不是节点或电子专家,所以我不确定

【问题讨论】:

  • 在我的情况下,我的 api 响应 pdf 数据到流中,我正在尝试使用 fs.writeFile 或 fs.writeFileSync 方法将该 pdf 数据流下载到 pdf 中。我得到空白的pdf。我曾尝试在请求标头和 fs 方法中添加编码二进制文件。我正在电子中运行我的应用程序。感谢您在更新的问题中提到电子。你能解释一下吗?或者我哪里错了。

标签: node.js encoding electron writefile


【解决方案1】:

从图像数据创建一个缓冲区并将其编码设置为binary。然后将该数据传递到stream.PassThrough 并将其通过管道传递到stream.Writable

var fs = require('fs');
var stream = require('stream');

var imgStream = new stream.PassThrough();
imgStream.end(Buffer.from(data, 'binary'));

var wStream = fs.createWriteStream('./<dest>.<ext>');

imgStream.once('end', () => {
    console.log('Image Written');
});

imgStream.once('error', (err) => {
    console.log(err);
});

imgStream.pipe(wStream);

【讨论】:

  • 嗨@peteb。谢谢您的回答。我尝试了您的建议,对于 pdf 文件,每个文件都抛出了 Unknown encoding: %pdf-1.4 的错误。图像文件似乎没有引发任何错误,但图像仍然损坏,因此无法读取。我已经更新了我的问题,包括我正在通过电子运行这个事实,尽管我不确定这有多相关
  • 解决方案是将请求编码设置为“二进制”,但是,正如您所建议的,它还需要将缓冲区编码也设置为“二进制”。在过去的两天里,我一直在尝试这两种方法,但从未一起尝试过(为什么超出了我的范围)。但是这样做似乎解决了我的问题,所以我会标记你是正确的,因为它包含解决方案的一部分。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多