图像的节点 writeFileSync 编码选项
Node writeFileSync encoding options for images
我正在使用 fs.writeFileSync(file, data[, options])
保存从 http.get(options[, callback])
返回的文件
这适用于文本文件,但图像、pdf 等最终会被损坏。从我所做的搜索来看,这显然是因为 fs.writeFileSync(file, data[, options])
默认为 UTF-8
我试过将编码设置为 'binary'、mime 类型和扩展名都无济于事。感觉我忽略了一些非常明显的东西,有人能给我指出正确的方向吗?
提前致谢
更新
我是运行这个通过electron的。我认为不值得一提,因为电子只是 运行 节点,但我不是节点或电子专家所以我不确定
从图像数据创建一个缓冲区并将其编码设置为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);
我正在使用 fs.writeFileSync(file, data[, options])
保存从 http.get(options[, callback])
这适用于文本文件,但图像、pdf 等最终会被损坏。从我所做的搜索来看,这显然是因为 fs.writeFileSync(file, data[, options])
默认为 UTF-8
我试过将编码设置为 'binary'、mime 类型和扩展名都无济于事。感觉我忽略了一些非常明显的东西,有人能给我指出正确的方向吗?
提前致谢
更新
我是运行这个通过electron的。我认为不值得一提,因为电子只是 运行 节点,但我不是节点或电子专家所以我不确定
从图像数据创建一个缓冲区并将其编码设置为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);