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

如何修改S3解压Lambda函数实现解压文件重命名?

解决方案

可以直接通过s3-unzip包内置的transformKey配置项实现解压文件的重命名,无需依赖本地文件系统。以下是修改后的完整代码:

const S3Unzip = require('s3-unzip');

exports.handler = function(event, context, callback) { 
    const bucketname = event.Records[0].s3.bucket.name;
    const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
    // 提取原ZIP文件的基础名称(不含后缀和路径),用于重命名逻辑
    const zipBaseName = filename.split('/').pop().replace(/\.zip$/, '');

    new S3Unzip({ 
        bucket: bucketname, 
        file: filename, 
        verbose: true,
        // 自定义重命名逻辑的核心配置
        transformKey: (originalKey) => {
            // 这里可以根据需求修改重命名规则,以下是几种常见示例:
            
            // 示例1:给所有解压文件添加统一前缀
            // return `unzipped_${originalKey}`;
            
            // 示例2:将解压文件放到以原ZIP命名的子目录中(避免同名文件覆盖)
            return `${zipBaseName}/${originalKey}`;
            
            // 示例3:替换文件名中的特定字符串
            // return originalKey.replace('old_prefix', 'new_prefix');
        }
    }, function(err, success) { 
        if (err) { 
            callback(err); 
        } else { 
            callback(null, '文件解压并重命名上传完成'); 
        } 
    }); 
}

关键说明

  • transformKey是s3-unzip专门提供的回调函数,用于修改上传至S3的文件键(即文件名/路径),全程在内存中处理,不需要本地文件系统支持。
  • 回调参数originalKey是ZIP包内原有的文件路径/名称,你可以基于它编写任意自定义重命名逻辑:
    • 如果ZIP内有子文件夹结构,originalKey会包含完整的相对路径,你的逻辑可以保留或修改这部分路径。
    • 结合原ZIP文件的名称(如代码中的zipBaseName)可以实现批量关联命名,避免不同ZIP解压后的文件冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:50:21