为了账号安全,请及时绑定邮箱和手机立即绑定

如何使 fs writeFile 更快地写入图像?

如何使 fs writeFile 更快地写入图像?

翻翻过去那场雪 2023-07-29 15:46:55
我怎样才能让它更快?我正在使用节点和 fs 库。这是发送 jpg 图像的 fs.Readable 流的 POST 请求的端点。代码开始停留在 800 kB 左右。最终,我希望能够保存视频。理想情况下,我希望它花费的时间少于十秒。  var bufs = [];  readStream.on('data', function(d){ bufs.push(d); });  readStream.on('end', function(){  var buf = Buffer.concat(bufs);  console.log(buf);  fs.writeFile("test.jpg", buf, ()=>{console.log('hi')});  });
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

一种更简单的方法,也使用更少的内存并并行化写入(在块到达时写入块)并且应该更快一点,那就是将流直接通过管道传输到输出文件。


readStream.pipe(fs.createWriteStream("test.jpg"));

readStream.on('close', () => {

    console.log("all done now");

});

或者,通过更好的错误处理,可以捕获两个流上的错误并告诉您一切何时完成:


const { pipeline } = require('stream');


pipeline(readStream, fs.createWriteStream("test.jpg"), err => {

    if (err) {

        console.log(err);

    } else {

        console.log("all done");

    }

});

或者,使用 Promise 和pipeline():


const pipeline = util.promisify(require('stream').pipeline);


pipeline(readStream, fs.createWriteStream("test.jpg")).then(() => {

   console.log("all done");

}).catch(err => {

   console.log(err);

});


查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信