将ArrayBuffer从Angular传递给Elecron-导致窗口崩溃

时间:2019-01-24 12:30:45

标签: javascript angular electron arraybuffer electron-window

我内部有一个Electron应用程序,我正在加载Angular应用程序。我正在通过API调用下载字节数组(即ArrayBuffer),并将这些数据传递给通过electron.remote.require('./file-service')连接的方法,以在本地文件系统中创建文件。

如果我下载到120 MB,它将支持。如果我下载的大小超过此大小,则会挂起窗口,并且UI也会变成白屏。

示例角度代码:

declare var electron: any;
const { createDataFile } = electron.remote.require('./file-service')

const payLoad = new FormData();
const httpOptions =  {
      headers: new HttpHeaders(),
      reportProgress: true,
    };

const req = new HttpRequest('GET', 'http://localhost:8080/getData', payLoad, {...httpOptions, responseType: 'arraybuffer'});
this.http.request<ArrayBuffer>(req).subscribe((event: HttpEvent<ArrayBuffer>) => {

    switch (event.type) {
        case HttpEventType.Response:
            createDataFile(event.body)
        break;
    }

});

与文件系统相关的代码: file-service.js

module.exports = {
    createDataFile(fileData) {

    }
}

我用零个语句制作了该方法,但它仍然挂着,窗口变成了白色。

电子窗口:

enter image description here

enter image description here

请协助我解决此问题。

1 个答案:

答案 0 :(得分:0)

https://github.com/electron/electron/blob/master/docs/api/remote.md#remote-objects

  

远程模块返回的每个对象(包括函数)在主进程中都代表一个对象(我们称其为远程对象或远程函数)。当您调用远程对象的方法,调用远程函数或使用远程构造函数(函数)创建新对象时,实际上是在发送同步的进程间消息。

Electron的遥控器会同步序列化您的数据,因此,发送超大字节大小自然会导致整个ui失去响应。在这种情况下,甚至异步IPC都听起来不可行(即120MB足够大)-您需要重新设计逻辑来存储文件,而又不涉及繁琐的IPC /序列化。这可能不仅是问题的原因,而且无论如何都应更改。