在电子应用程序中从blob写入文件到磁盘

我正在创build一个电子应用程序,我正在从networking摄像头和桌面录制数据,在录制会话结束时,我想将数据保存到后台文件中。 我不知道如何直接将数据从blob写入文件。 有什么build议么? 以下是我目前对MediaRecord Stop事件的处理。

this.mediaRecorder.onstop = (e) => { var blob = new Blob(this.chunks, { 'type' : 'video/mp4; codecs=H.264' }); var fs = require('fs'); var fr = new FileReader(); var data = null; fr.onload = () => { data = fr.result; fs.writeFile("test.mp4", data, err => { if(err) { return console.log(err); } console.log("The file was saved!"); }); }; fr.readAsArrayBuffer(blob); } 

你可以使用FileReaderBuffer

在渲染器进程中,将事件发送到主进程以使用缓冲区保存文件:

 function saveBlob(blob) { let reader = new FileReader() reader.onload = function() { if (reader.readyState == 2) { var buffer = new Buffer(reader.result) ipcRenderer.send(SAVE_FILE, fileName, buffer) console.log(`Saving ${JSON.stringify({ fileName, size: blob.size })}`) } } reader.readAsArrayBuffer(blob) } 

取回确认:

 ipcRenderer.on(SAVED_FILE, (event, path) => { console.log("Saved file " + path) }) 

(SAVE_FILE和SAVED_FILE是包含事件名称的静态string)

在主要过程中:

 ipcMain.on(SAVE_FILE, (event, path, buffer) => { outputFile(path, buffer, err => { if (err) { event.sender.send(ERROR, err.message) } else { event.sender.send(SAVED_FILE, path) } }) }) 

outputFile是从'fs-extra'

处理主进程中的节点操作是首选。 请参阅电子安全build议。

如果你不想使用主进程,你可以使用'electron-remote'来创build后台进程来写文件。 此外,您可以在后台进程中调用ffmpeg将文件压缩/编码为不同的格式。