Lambda复制S3文件时特殊字符文件名解码问题求助
S3对象键URL解码解决方案
CloudWatch日志里的Active%3D1是Active=1的URL编码结果,%3D对应等号(=)的URL转义字符。要解决这个问题,只需在Lambda代码中对获取到的S3对象键进行URL解码即可。
Python Lambda代码修改示例
from urllib.parse import unquote def lambda_handler(event, context): # 从S3事件中获取编码后的对象键 encoded_object_key = event['Records'][0]['s3']['object']['key'] # 解码得到原始路径 decoded_object_key = unquote(encoded_object_key) # 后续使用decoded_object_key进行源桶到目标桶的复制操作 print(f"解码后的完整路径: {decoded_object_key}")
Node.js Lambda代码修改示例
exports.handler = async (event) => { const encodedObjectKey = event.Records[0].s3.object.key; const decodedObjectKey = decodeURIComponent(encodedObjectKey); console.log(`解码后的完整路径: ${decodedObjectKey}`); // 执行复制逻辑 };
说明
S3触发Lambda事件时,会自动对对象键中的特殊字符(如=、空格、/等)进行URL编码,因此必须解码才能得到与S3控制台显示一致的原始文件夹和文件名。解码后即可正常执行跨桶复制操作,不会再出现路径不匹配的问题。
内容的提问来源于stack exchange,提问作者irfan shaikh
相关产品推荐
相关产品推荐

