Electron IPC: файловые объекты поступают как пустые объекты {} в основной процессJavascript

Форум по Javascript
Ответить
Anonymous
 Electron IPC: файловые объекты поступают как пустые объекты {} в основной процесс

Сообщение Anonymous »

Проблема
Я пытаюсь отправить несколько файлов из процесса рендеринга в основной процесс с помощью IPC Electron, но объекты файлов приходят пустыми.
Процесс рендеринга:

Код: Выделить всё

if (files?.length > 1) {
window.electron.ipcRenderer.send('multipleFiles', files)
}

Основной процесс:
ipcMain.on('multipleFiles', (event, payload) => {
console.log("Received multipleFiles");
console.log(payload);

Object.keys(payload).map((key) => {
console.log(payload[key].data) // undefined or empty
})
})

Что происходит
Итерация выполняется правильное количество раз (соответствует файлам.длина)
Однако каждый элемент в полезных данных представляет собой просто пустой объект {}
Данные файла не передаются
Что я пробовал
Я могу подтвердить, что файлы содержат действительные объекты File в процессе рендеринга перед отправкой, но они теряют свои данные при получении в основном
Вопрос
Почему объекты File поступают пустыми в основной процесс и как правильно передать данные файла через IPC Electron?
Среда:
Версия Electron: 38.1.2
Воспроизведение:
Запустите npm create @quick-start/electron, а затем установите для renderer.js значение


const ipcHandle = (): void => window.electron.ipcRenderer.send('ping')

function handleFileSelect(event: Event): void {
const input = event.target as HTMLInputElement
const files = input.files

if (files?.length === 1) {
console.log(`Processing ${files.length} file(s)`)

for (const file of Array.from(files)) {
const reader = new FileReader()

reader.onload = () => {
if (reader.result instanceof ArrayBuffer) {
console.log('About to send:', file.name)
window.electron.ipcRenderer.send('file-upload', {
name: file.name,
type: file.type,
data: reader.result
})
} else {
console.error('Expected ArrayBuffer but got:', typeof reader.result)
}
}

reader.onerror = () => {
console.error('FileReader error:', reader.error)
}

reader.readAsArrayBuffer(file)
}
} else if (files?.length > 1) {
window.electron.ipcRenderer.send('multipleFiles', files)
}
}


Powered by electron-vite

Build an Electron app with
Svelte
and
TypeScript

Please try pressing F12
to open the devTool


Documentation

Send IPC




и добавьте следующее в main.js

ipcMain.on('file-upload', (event, payload) => {
console.log("Received file:", payload.name, payload.type)
console.log("Data size:", payload.data.byteLength, "bytes")

// Now you can work with the data
// ... rest of your XLSX processing
})

ipcMain.on('multipleFiles', (events, payload)=>{
console.log("Received multipleFiles");
console.log(payload)
Object.keys(payload).map((key)=>{
console.log(payload[key].data)
})
})



Подробнее здесь: https://stackoverflow.com/questions/798 ... in-process
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»