You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron集成discord.js发送图片报REQ_RESOURCE_TYPE错误如何解决?

问题根因

该报错由Electron与discord.js的Buffer实例兼容性问题导致:Electron运行环境(跨IPC传输后的数据、上下文隔离开启的渲染进程)中生成的Buffer实例,不属于Node.js原生Buffer构造函数的实例,而discord.js的文件校验逻辑使用instanceof Buffer做类型判断,因此校验失败抛出错误。

可行解决方案

  • 方案1:统一在主进程运行discord.js逻辑
    所有bot相关操作、消息发送逻辑全部放在Electron主进程执行,渲染进程仅通过IPC通道向主进程发送触发指令、接收日志回传即可,无需拆分双进程,从根源避免Buffer实例不一致问题。
  • 方案2:强制转换为原生Buffer实例
    拿到图片数据后,在主进程中用Buffer.from()重新包装,确保传给discord.js的是主进程原生Buffer实例:
    // imgData为渲染进程IPC传入的Uint8Array或Electron环境生成的Buffer
    const validImgBuffer = Buffer.from(imgData)
    
    // 发送消息示例
    channel.send({
      embeds: [embed],
      files: [{
        attachment: validImgBuffer,
        name: 'stats.png'
      }]
    })
    
  • 方案3:直接传入本地文件绝对路径
    如果PNG已保存到本地磁盘,无需读取为Buffer,直接传入文件系统绝对路径字符串即可绕过Buffer校验:
    const path = require('path')
    const { app } = require('electron')
    
    // 注意不要使用带app://等自定义协议的路径,必须是真实磁盘路径
    const imgPath = path.resolve(app.getAppPath(), './output/stats.png')
    
    channel.send({
      embeds: [embed],
      files: [imgPath]
    })
    
  • 方案4:使用Base64 Data URI传递
    也可将PNG转换为标准Data URI字符串传入,同样可以绕过Buffer校验:
    const imgDataURI = `data:image/png;base64,${pngBase64Content}`
    
    channel.send({
      embeds: [embed],
      files: [imgDataURI]
    })
    

内容的提问来源于stack exchange,提问作者gonzalinux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:36:03