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

我怎样才能让它更快?我正在使用节点和 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')});

  });


翻翻过去那场雪
浏览 78回答 1
1回答

万千封印

一种更简单的方法,也使用更少的内存并并行化写入(在块到达时写入块)并且应该更快一点,那就是将流直接通过管道传输到输出文件。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);});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript