Я пытаюсь отправить несколько файлов из процесса рендеринга в основной процесс с помощью 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 F12Documentation
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
Мобильная версия