You need to enable JavaScript to run this app. 如何使用split/join生成新AWS S3对象键,实现Lambda跨桶迁移文件自定义路径
优惠活动
大模型
产品
解决方案
定价
更多

如何使用split/join生成新AWS S3对象键,实现Lambda跨桶迁移文件自定义路径

解决方案

核心逻辑说明

你只需要在现有跨桶迁移逻辑的基础上,增加少量代码处理目标对象键即可,核心步骤如下:

  • 从S3触发事件的Records字段中提取源文件的对象键(Key)
  • 从源Key中提取纯文件名(自动忽略源Key自带的目录前缀)
  • 拆分纯文件名的名称部分和后缀部分,用名称部分作为目标桶的一级目录,拼接得到最终目标Key

Python 代码片段

使用Python原生内置模块实现,无需额外配置Lambda层:

import os

# 从触发事件中取源Key,该逻辑你现有迁移代码中应该已经存在
source_key = event['Records'][0]['s3']['object']['key']
# 提取纯文件名,自动去掉源Key的所有上层路径前缀
file_full_name = os.path.basename(source_key)
# 拆分文件名和后缀,得到目标目录名
file_name_without_suffix = os.path.splitext(file_full_name)[0]
# 拼接得到符合要求的目标Key
target_key = f"{file_name_without_suffix}/{file_full_name}"

# 后续直接使用target_key调用你已有的copy_object/put_object跨桶迁移逻辑即可

该代码对带多个点的文件名也可以正常适配,例如源文件为family.photo.grandkids.jpg时,会自动生成family.photo.grandkids/family.photo.grandkids.jpg的目标Key。


Node.js 代码片段

使用Node.js原生内置模块实现,无需额外安装依赖:

const path = require('path');

// 从触发事件中取源Key,该逻辑你现有迁移代码中应该已经存在
const sourceKey = event.Records[0].s3.object.key;
// 提取纯文件名,自动去掉源Key的所有上层路径前缀
const fileFullName = path.basename(sourceKey);
// 拆分文件名和后缀,得到目标目录名
const fileNameWithoutSuffix = path.parse(fileFullName).name;
// 拼接得到符合要求的目标Key
const targetKey = `${fileNameWithoutSuffix}/${fileFullName}`;

// 后续直接使用targetKey调用你已有的s3.copyObject等跨桶迁移逻辑即可

注意事项

  • S3对象键不需要以/开头,拼接时无需额外添加开头的斜杠,避免出现冗余前缀
  • 该处理逻辑耗时在毫秒级,完全适配数十万级的上传规模,不会影响Lambda执行效率
  • 即使源文件上传到源桶时没有任何上层路径前缀,上述代码也可以正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 06:15:03