Node.js中Octokit返回的含Uint8Contents的ArrayBuffer如何转存为tar文件
解决步骤
- 首先确保调用Octokit请求时指定了正确的响应格式,避免二进制数据编码错误:
const response = await octokit.request('GET /repos/{owner}/{repo}/tarball/{ref}', { owner: 'octocat', repo: 'hello-world', ref: 'ref', // 必须添加该配置,确保返回的是原始ArrayBuffer格式的二进制数据 responseType: 'arraybuffer' })
- 用Node.js内置的
fs和path模块把返回的ArrayBuffer写入本地文件即可:
const fs = require('fs/promises') // 也可使用同步API:require('fs') const path = require('path') // 定义tar文件保存路径,示例为当前项目下downloads文件夹内的repo.tar const savePath = path.join(__dirname, 'downloads', 'repo.tar') // 将ArrayBuffer转换为Node.js可用的Buffer对象 const tarBuffer = Buffer.from(response.data) // 异步写入文件 await fs.writeFile(savePath, tarBuffer) // 同步写入可替换为以下代码 // fs.writeFileSync(savePath, tarBuffer)
额外说明
- 写入前请确保目标文件夹(示例中的
downloads文件夹)已存在,否则会报错。如需自动创建文件夹,可在写入前添加await fs.mkdir(path.join(__dirname, 'downloads'), { recursive: true })逻辑。 - 如果你需要直接解压tar文件到指定目录而非保存为tar包,可以安装
tarnpm包,直接把Buffer传给解压方法即可。
内容的提问来源于stack exchange,提问作者Harald
相关产品推荐
相关产品推荐

