【发布时间】:2023-02-17 05:43:31
【问题描述】:
我有一个 S3 Bucket Streaming 日志到 lambda 函数,该函数根据某些逻辑标记文件。
虽然我过去和I understand 解决过这个问题,但有一些字符需要处理,我想知道是否有一种安全的方法可以使用某些 API 来处理这个问题,或者我需要自己处理这个问题.
例如,我有一个像这样的 lambda 函数:
import boto3
def lambda_handler(event, context):
s3 = boto3.client("s3")
for record in event["Records"]:
bucket = record["s3"]["bucket"]["name"]
objectName = record["s3"]["object"]["key"]
tags = []
if "Pizza" in objectName:
tags.append({"Key" : "Project", "Value" : "Great"})
if "Hamburger" in objectName:
tags.append({"Key" : "Project", "Value" : "Good"})
if "Liver" in objectName:
tags.append({"Key" : "Project", "Value" : "Yuck"})
s3.put_object_tagging(
Bucket=bucket,
Key=objectName,
Tagging={
"TagSet" : tags
}
)
return {
'statusCode': 200,
}
这段代码效果很好。我将一个名为 Pizza-Is-Better-Than-Liver.txt 的文件上传到 s3,然后该函数运行并使用 Great 和 Yuck 标记该文件(对于紧张的示例感到抱歉)。
但是,如果我上传文件Pizza Is+AmazeBalls.txt,事情就会发生变化:
查看 CloudWatch 中的事件,对象键显示为:Pizza+Is%2BAmazeBalls.txt。
显然,当我将该密钥传递给put_object_tagging()时,空间被转义为+,+转义为%2B,它失败并出现NoSuchKey错误。
我的问题;是否有定义的方法来处理 boto3 或其他一些 sdk 中的转义字符,或者我只需要自己做?我真的不知道并向函数添加任何模块,我可以只使用 do a contains / replace(),但奇怪的是我会得到一些东西,如果不进行一些转换我无法立即使用。
我没有上传文件,也不能强制执行他们所说的东西(我试过但失败了),如果它是有效的 Windows 或 Mac 文件名,它应该可以工作(我知道那是另一个问题但我可以处理)。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda