Discord.js部署Replit下载Discord附件PNG图片保存异常该如何解决?
问题根源
你当前的代码存在2个核心错误导致保存的图片无效:
- Discord.js v12的
MessageAttachment对象没有png属性,你调用a.png拿到的是undefined,写入文件的内容是空的无效数据,自然无法正常打开 - 附件的实际内容存储在附件的url对应的远端资源,需要主动请求获取二进制流后再写入本地文件
解决方案
首先安装兼容Node v12版本的请求依赖:
npm install axios@0.27.2
修改后的完整代码如下:
const fs = require('fs'); const axios = require('axios'); client.on("message" , async msg => { if (msg.content === "$Time") { // 筛选出png格式的附件 const pngAttachments = msg.attachments.filter(a => a.name.toLowerCase().endsWith('.png')); for (const a of pngAttachments) { // 请求获取图片二进制流 const res = await axios.get(a.url, { responseType: 'arraybuffer' }); // 写入本地文件,若要存入images目录需保证目录已存在 fs.writeFileSync(`./${a.name}`, res.data); } setTimeout(function () { msg.channel.send("Sure thing", { files: [`./images/SPOILER_HW.png`] }) }, 5000); } })
注意事项
- 如果需要把图片存入自定义目录(比如示例中的
./images),需要提前确认目录存在,不存在时可以用fs.mkdirSync('./images', {recursive: true})提前创建 - 存入自定义目录时,写入文件的路径要对应修改为
./images/${a.name}
内容的提问来源于stack exchange,提问作者Ben 14000605
相关产品推荐
相关产品推荐

