在电子应用程序中从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); }
你可以使用FileReader
和Buffer
。
在渲染器进程中,将事件发送到主进程以使用缓冲区保存文件:
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
将文件压缩/编码为不同的格式。