Discord.js V13 发送.sqlite文件至私信异常如何解决
问题原因
之所以图片文件可正常传输,但sqlite格式文件发送后无法使用,是因为图片Buffer自带可被Discord识别的MIME类型信息,平台能自动补全正确后缀名;而sqlite类数据库文件没有通用的可自动识别的MIME标识,你当前的代码仅传递了文件Buffer,没有手动指定带正确后缀的文件名,Discord就会生成格式错误的无效文件。
修复后的实现代码
不需要手动读取文件Buffer,Discord.js v13支持直接传入本地文件路径,只需补充name参数指定带.sqlite后缀的文件名即可:
const { owner } = require('../config/config.json') const fs = require('fs'); const path = require('path') const moment = require('moment') const today = moment().format('YYYY-MM-DD-MM-SS') module.exports = { name: "data", async execute(interaction) { if (interaction.member.id !== owner) return try { await interaction.member.send({ content: `**${today} database**\n`, files: [ { attachment: path.join('./data.sqlite'), // 自定义发送后的文件名,必须带.sqlite后缀 name: `${today}-data.sqlite` } ] }) } catch (err) { console.log(err) await interaction.member.send(`err!\n\n**${err}**`) } } }
适配json.sqlite格式的调整方法
如果需要发送后缀为.json.sqlite的数据库文件,仅需修改name参数值即可,其他逻辑无需改动:
name: `${today}-data.json.sqlite`
注意事项
- 发送前确保sqlite文件没有被其他进程占用写入,避免读取到损坏的数据库文件
- Discord普通用户私信上传文件限制为8MB,Nitro用户根据等级分别为50MB/500MB,超出体积的数据库建议先压缩为zip包再发送
内容的提问来源于stack exchange,提问作者ON MO
相关产品推荐
相关产品推荐

