S3视频转HLS时Lambda获取含特殊字符文件名路径异常求助
解决S3文件名含特殊字符时Lambda获取的Key编码问题
问题根源
S3触发Lambda事件时,会对对象Key做URL编码:空格被转为+,括号等特殊字符也会被编码。直接用编码后的Key拼接S3 URI时,MediaConvert无法匹配实际存储的未编码对象路径,导致文件找不到。
解决方案
用Python的urllib.parse.unquote_plus()方法对编码后的Key解码,还原原始文件名格式。
修改后的Lambda代码
import os import uuid from urllib.parse import unquote_plus def handler(event, context): assetID = str(uuid.uuid4()) sourceS3Bucket = event['Records'][0]['s3']['bucket']['name'] # 解码URL编码后的Key sourceS3Key = unquote_plus(event['Records'][0]['s3']['object']['key']) sourceS3 = f's3://{sourceS3Bucket}/{sourceS3Key}' sourceS3Basename = os.path.splitext(os.path.basename(sourceS3))[0] # 后续处理逻辑...
关键说明
unquote_plus()会将+还原为空格,同时解码其他URL编码的特殊字符(比如括号会恢复为原始符号)- 解码后的Key拼接成的S3 URI与实际对象路径完全一致,MediaConvert就能正常读取文件
内容的提问来源于stack exchange,提问作者Venkatesh
相关产品推荐
相关产品推荐

