Node.js+Vue从Google Drive下载SQLite备份文件损坏问题求助
解决Google Drive下载SQLite文件损坏问题
你的问题核心是用文本方式处理二进制文件:SQLite属于二进制格式,response.text()会把下载的二进制字节按UTF-8编码解析成字符串,这个转换过程会破坏原始二进制数据,最终写入的文件自然损坏,且编码转换会导致体积异常增大。
修正后的代码
async restoreGoogleDriveDatabase(fileId) { const url = `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media`; const options = { method: 'GET', headers: { 'Authorization': 'Bearer ' + this.getToken() }, }; const response = await fetch(url, options); const arrayBuffer = await response.arrayBuffer(); // 将浏览器端ArrayBuffer转为Node.js Buffer,适配二进制写入 const buffer = Buffer.from(arrayBuffer); const path = require('path').join(window.process.env.ProgramData, 'Home Inventory', 'HomeInventory1.db'); fs.writeFile(path, buffer, (err) => { if (err) throw err; console.warn('文件恢复完成'); }); }
关键改动说明
- 替换
response.text()为response.arrayBuffer():直接获取原始二进制字节流,彻底避免编码转换对数据的破坏 - 新增
Buffer.from(arrayBuffer):把浏览器环境的ArrayBuffer转换成Node.js的Buffer类型,确保fs模块能正确写入二进制内容 - 用
path.join拼接完整文件路径:避免手动拼接字符串时的转义错误,路径处理更可靠
内容的提问来源于stack exchange,提问作者DRW
相关产品推荐
相关产品推荐

