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

AWS S3 批量获取多个json.gz文件并合并内容的实现方法

AWS S3批量获取gzip压缩文件并合并内容实现方案

首先需要先修复原单文件读取函数的问题:原函数定义了key和bucket参数但实际硬编码了配置,且Promise回调不需要额外加async标识,修复后的单文件读取函数如下:

const zlib = require('zlib');
const AWS = require('aws-sdk');
// 初始化配置只需要执行一次,不用放到每次请求里
AWS.config.loadFromPath(process.env["PWD"]+'/private/awss3/s3_config.json'); 
const s3 = new AWS.S3();

const unzipFromS3 = (key, bucket) => {
  return new Promise((resolve, reject) => {
    const options = {
      Bucket: bucket,
      Key: key,
    };
    s3.getObject(options, function(err, res) {
      if(err) return reject(err);
      resolve(zlib.unzipSync(res.Body).toString());
    });
  });
};

接下来实现批量读取+合并逻辑,用Promise.all并行拉取所有目标文件,全部返回后按业务需求合并内容即可,示例代码如下:

// 配置你的目标桶和文件列表
const TARGET_BUCKET = 'my-bucket';
const FILE_KEY_LIST = [
  'mainfile1.json.gz',
  'mainfile2.json.gz',
  'mainfile3.json.gz'
];

// 批量读取合并入口
const mergeS3Files = async () => {
  try {
    // 并行拉取所有文件内容
    const fileContentList = await Promise.all(
      FILE_KEY_LIST.map(key => unzipFromS3(key, TARGET_BUCKET))
    );

    // 按需选择合并逻辑,以下是3种常见场景:
    let mergedResult;
    // 场景1:纯文本内容直接拼接
    mergedResult = fileContentList.join('');

    // 场景2:每个文件是独立JSON数组,合并为一个大数组
    // mergedResult = [];
    // fileContentList.forEach(content => {
    //   const jsonArr = JSON.parse(content);
    //   mergedResult = mergedResult.concat(jsonArr);
    // });
    // mergedResult = JSON.stringify(mergedResult); // 如果需要输出为JSON字符串可以加这一步

    // 场景3:每个文件是NDJSON格式(每行一个JSON对象),合并为对象数组
    // mergedResult = [];
    // fileContentList.forEach(content => {
    //   const lineList = content.trim().split('\n');
    //   lineList.forEach(line => mergedResult.push(JSON.parse(line)));
    // });

    console.log('合并完成,结果长度:', mergedResult.length);
    return mergedResult;
  } catch (err) {
    console.error('批量处理失败:', err);
    throw err;
  }
};

// 执行调用
mergeS3Files().then(result => {
  // 后续处理合并后的结果
  console.dir(result);
});

注意:如果你的文件数量非常多,建议控制并发数避免触发S3的请求频率限制,可以用并发控制工具做请求限流,避免请求失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:07