官网有个示例https://www.electronjs.org/docs/latest/tutorial/native-file-drag-drop#overview,如果完全按照这个去做,会发现并不能实现此功能。
我的应用场景是electron 整合了聊天,聊天内会有发送的文件、图片等,需要实现的功能是,可以拖拽这些文件到桌面,或电脑的其他文件夹。
1.在需要拖拽的文件上绑定拖拽事件
<img src="https://www.w3cways.com/wp-content/uploads/2015/07/logo.png" ondragstart={(e: Event) => this.ondragstart(e, this.item)} />
2.拖拽事件的处理
ondragstart(event: Event, item: any) { //这里省略一些处理步骤,如果文件的链接是远程链接,需要先保存到本地,拿到本地路径后再通过ipcRenderer发送给主进程 this.$ipcRenderer.send('ondragstart', path) }
上面都是在渲染进程内
3.主进程内的处理
这里需要注意的是,上面的渲染进程是基于主进程创建的窗口:win
ipcMain.on('ondragstart', (event, filePath) => { win.webContents.startDrag({ file: filePath, //文件路径 icon: 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',//=拖拽出应用时的ICON }) })