Heroku部署DiscordJS Bot时本地图片路径无效报Invalid URL错误
解决DiscordJS Bot在Heroku加载图片失败的问题
问题根源
本地用相对路径"image1.png"能正常加载,但Heroku的工作目录结构、运行环境和本地存在差异,相对路径会指向错误位置;另外Discord.js在Heroku环境下可能误把相对路径解析成URL,触发ERR_INVALID_URL错误。
具体解决步骤
用绝对路径定位图片:借助Node.js的
path模块生成绝对路径,确保无论部署环境如何都能精准找到文件。在imageloader.js里这么写:const path = require('path'); // __dirname指向当前脚本所在的src目录,拼接图片文件名得到绝对路径 const image1Path = path.join(__dirname, 'image1.png');之后所有加载图片的操作都用这个绝对路径。
检查Git忽略规则:打开
.gitignore文件,确保没有把.png文件或者整个src目录排除在外。如果被忽略,Heroku部署时不会上传这些图片,自然找不到。验证Heroku上的文件结构:通过Heroku CLI执行
heroku run bash进入服务器终端,然后输入cd src && ls,确认图片文件确实存在于src目录下,和本地结构一致。正确使用Discord.js的附件类:发送图片时用
AttachmentBuilder(v14+)或者Attachment(旧版本)加载本地文件,避免路径解析错误:const { AttachmentBuilder } = require('discord.js'); const imageAttachment = new AttachmentBuilder(image1Path); // 发送到目标频道 channel.send({ files: [imageAttachment] });
内容的提问来源于stack exchange,提问作者Chris Simmons
相关产品推荐
相关产品推荐

