Передать ArrayBuffer из Angular в Elecron - вылетает окно - PullRequest
0 голосов
/ 24 января 2019

У меня внутреннее приложение Electron. Я загружаю приложение Angular. Я загружаю байтовый массив (т.е. ArrayBuffer) через вызов API и передаю эти данные методу, который подключаю через electron.remote.require('./file-service'), чтобы создать файл в локальной файловой системе.

Если я загружаю до 120 МБ, он поддерживает. если я загружаю больше, чем этот размер, окно зависает, и пользовательский интерфейс тоже становится белым экраном.

Пример углового кода:

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 голосов
/ 24 января 2019

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

Каждый объект (включая функции), возвращаемый удаленным модулем, представляет объект в основном процессе (мы называем его удаленным объектом или удаленной функцией). Когда вы вызываете методы удаленного объекта, вызываете удаленную функцию или создаете новый объект с помощью удаленного конструктора (функции), вы фактически отправляете синхронные межпроцессные сообщения.

Пульт Electron синхронно сериализует ваши данные, поэтому отправка очень большого байта естественным образом приводит к тому, что весь пользовательский интерфейс перестает отвечать на запросы. в этом случае даже асинхронный IPC не кажется выполнимым (т. е. 120 МБ слишком велико) - вам необходимо изменить логику для хранения файла без использования тяжелых IPC / сериализации. Это может быть не единственной причиной вашей проблемы, но все равно должно быть изменено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...