使用electron+whatsapp-web.js开发WhatsApp机器人发送图片报错求助
解决WhatsApp机器人发送图片的报错问题
第一个报错:Error: Evaluation failed: a(使用MessageMedia.fromFilePath时)
这个报错通常和文件路径、权限或库版本相关,按以下步骤排查修复:
强制使用绝对路径
相对路径在Electron环境中容易出现解析异常,用Node.js的path模块生成绝对路径:const path = require('path'); // 替换为你的图片实际相对路径 const absoluteImagePath = path.resolve(__dirname, 'project/data/image.jpg'); const media = MessageMedia.fromFilePath(absoluteImagePath); console.log(media); // 确认media对象的data属性不为空值 await client.sendMessage(groups[0]._serialized, media, { caption: message });检查文件状态与权限
- 手动打开图片文件,确认文件未损坏
- 避免将图片存放在系统权限严格的目录(如C盘根目录),开发模式下优先用项目内的相对目录
修复库版本兼容问题
部分旧版本whatsapp-web.js对本地文件读取存在bug,尝试升级到最新稳定版:npm install whatsapp-web.js@latest
第二个报错:DOMException: Failed to execute 'atob' on 'Window'(手动创建MessageMedia时)
这个问题是base64字符串格式错误导致的,前端传来的base64通常带前缀,必须先清理干净:
// 假设前端传来的base64存储在image变量中 // 1. 移除base64前缀(如data:image/png;base64,) const cleanBase64 = image.replace(/^data:image\/(png|jpeg|jpg);base64,/, ''); // 2. 清除所有空格、换行等无效字符 const pureBase64 = cleanBase64.trim().replace(/\s+/g, ''); // 3. 匹配实际图片类型创建对象(jpg用image/jpeg,png用image/png) const media = new MessageMedia('image/png', pureBase64, 'image.png'); await client.sendMessage(groups[0]._serialized, media, { caption: message });
注意:图片的MIME类型必须和实际文件格式一致,不要硬写固定值。
内容的提问来源于stack exchange,提问作者Omar Yacop
相关产品推荐
相关产品推荐

