在电子应用程序中将文件从Blob写入磁盘 [英] Write file to disk from blob in electron application

查看:95
本文介绍了在电子应用程序中将文件从Blob写入磁盘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个Electron Application,用于在其中记录网络摄像头和桌面中的数据,在记录会话结束时,我想将数据保存到后台文件中。我不知道如何将数据从Blob直接写入文件。有什么建议么?
以下是我当前对MediaRecord Stop事件的处理。

I am creating an Electron Application in which I am recording data from webcam and desktop, at the end of the recording session, I want to save the data to a file in the background. I do not know how to write the data from a blob to a file directly. Any suggestions? Below is my current handling for MediaRecord Stop event.

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

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

In the renderer process, send the event to the main process to save the file with the 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是静态字符串con

(SAVE_FILE and SAVED_FILE are static strings containing event name)

,在主要过程中:

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'

outputFile is from 'fs-extra'

首选在主进程中处理节点操作。请参阅Electron安全建议。

Handling node operations in main process is preferred. See Electron Security suggestions.

如果您不想使用主流程,则可以使用'electron-remote'创建后台进程以写入文件。此外,您可以在后台进程中调用 ffmpeg 将文件压缩/编码为其他格式。

If you do want to not use main process, you can use 'electron-remote' to create background processes to write the file. Additionally, you can invoke ffmpeg in the background process to compress/encode the file into different format.

这篇关于在电子应用程序中将文件从Blob写入磁盘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆