如何修改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解压后的文件冲突。
- 如果ZIP内有子文件夹结构,
内容的提问来源于stack exchange,提问作者akhil office
相关产品推荐
相关产品推荐

