You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将REST API返回的十六进制Buffer转换为tar文件并提取内容?

问题解答

能否将Buffer十六进制转换为tar文件?

可以,但首先要明确:你当前收到的Buffer开头4d 4d 00 2a是TIFF图片文件的标识(对应ASCII的MM*,是大端TIFF的魔数),这说明接口返回的大概率不是tar文件,而是其他格式内容。

先排查问题根源

  • 校验响应类型:在resCallback里添加日志打印response.headers['content-type'],确认返回的是否为application/x-tar或application/octet-stream。如果是image/tiff这类格式,说明接口本身就没返回tar文件,需要和接口提供方确认。
  • 检查请求参数:你用req.write(JSON.stringify(body))发送JSON请求体,确认接口是否要求该格式,参数是否正确——参数错误可能导致接口返回错误内容。

若确认是tar文件的处理方法

如果后续确认收到的Buffer确实是tar文件字节流,直接将Buffer写入文件即可:

// 在onResult回调中处理返回的buffer
const fs = require('fs');
fs.writeFileSync('output.tar', buffer);

提取内容可使用系统tar命令:

tar -xf output.tar

或用Node.js的tar-fs包实现代码提取:

const tar = require('tar-fs');
const fs = require('fs');

tar.extract('./extracted').end(buffer);

代码优化建议

当前拼接Buffer的逻辑没问题,但可以新增响应类型日志,方便快速排查:

const resCallback = (response) => {
    // 新增:打印响应Content-Type
    console.info("Response Content-Type:", response.headers['content-type']);
    
    if (response.statusCode < 200 || response.statusCode > 299) {
        console.error(errorTag,"Did not get an OK from the server. Code:",response.statusCode);
        console.error(errorTag,"Did not get an OK from the server. Msg:",response.statusMessage);
        onResult(response.statusCode, null);
        response.resume();
        return;
    }
    
    let data = [];
    response.on('data', (chunk) => {
        data.push(chunk);
    });
    response.on('end', () => {
        const buffer = Buffer.concat(data);
        console.info({msg:infoTag +' response ended',contents:buffer});
        onResult(response.statusCode, buffer, null);                
    });
}

内容的提问来源于stack exchange,提问作者Amr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:02:37