数据从我的IpcMain返回"/>
如何获取我的数据从我的IpcMain返回
我正在创建一个拖放反应,并使用电子来发送和接收我的文件数据。我在console.log中收到一个senderId和sender。如何获取数据?我想念什么?
Dropzone.js文件
const [fileNames, setFileNames] = useState([]);
const handleDrop = useCallback(acceptedFiles => {
setFileNames(_.map(acceptedFiles, ({ name, type, path, size, lastModified,
lastModifiedDate }) => {
return { name, type, path, size, lastModified, lastModifiedDate };
}))
let formData = new FormData();
formData.append('uploadedFiles', fileNames);
}, [fileNames]);
useEffect(() => {
ipcRenderer.send(FETCH_AUDIO_FILES, fileNames);
}, [fileNames]);
useEffect(() => {
const handler = (filesWithData) => {
_.map(filesWithData, (event, data) => {
console.log(data);
})
};
ipcRenderer.on(METADATA_COMPLETED, handler);
return () => ipcRenderer.removeListener(METADATA_COMPLETED, handler);
});
Index.js文件
ipcMain.on(FETCH_AUDIO_FILES, (event, files) => {
const promises = _.map(files, (file) => {
return new Promise((resolve, reject) => {
NodeID3.read(file.path, (err, tags) => {
resolve({
...files,
...tags
})
})
})
});
Promise.all(promises).then(results => {
event.sender.send(METADATA_COMPLETED, results);
[![enter image description here][1]][1]});
});
回答如下:您不能通过IPC通道发送诸如文件之类的特殊对象:
参数将使用结构化克隆算法进行序列化,就像postMessage一样,因此将不包括原型链。发送函数,承诺,符号,WeakMap或WeakSet将引发异常。注意:不推荐发送非标准JavaScript类型(例如DOM对象或特殊的Electron对象),并且将开始引发从Electron 9开始的异常。]
-https://www.electronjs/docs/api/web-contents#contentssendchannel-args
您可以在渲染器进程中将文件读取为Base64字符串,Buffer或其他内容,然后将其发送到主进程,或者如果您要选择文件,则可以在主进程中使用例如https://www.electronjs/docs/api/dialog#dialogshowopendialogbrowserwindow-options吗?
更多推荐
如何获取我的数据从我的IpcMain返回
发布评论