Discord.js v14交互HTTP响应无法发送文件问题求助
解决Discord.js v14 HTTP交互端点发送文件失败的问题
问题核心原因
你用app.post('/interactions')处理命令时,仅在files数组里传filename无效——HTTP交互响应要求明确提供文件的二进制内容(Buffer或Stream),而非单纯的本地路径。这和interactionCreate事件中自动处理路径的逻辑不同。
另外attachments参数用法错误:它用于引用已上传到Discord CDN的文件,不能直接传入本地文件路径,因此直接使用会导致交互失败。
解决方案
方法1:读取文件为Buffer(适合小文件)
引入fs模块,读取文件二进制内容后传入files的attachment字段:
const fs = require('fs'); // 在app.post('/interactions')的处理逻辑中 return response.send({ type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE, data: { files: [{ filename: "video.mp4", attachment: fs.readFileSync("./videos/video.mp4") }], content: "Test" }, });
方法2:使用Stream(适合大视频文件)
针对较大的视频,用Stream读取可避免内存占用过高:
const fs = require('fs'); // 在app.post('/interactions')的处理逻辑中 return response.send({ type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE, data: { files: [{ filename: "video.mp4", attachment: fs.createReadStream("./videos/video.mp4") }], content: "Test" }, });
额外注意事项
- 确认本地文件路径正确,文件存在且机器人进程有读取权限
- 注意Discord的文件大小限制:非Nitro用户上传视频最大为50MB
内容的提问来源于stack exchange,提问作者Jimba Jamiono
相关产品推荐
相关产品推荐

