我有一个Python Lambda脚本,可以在上传到S3时缩小图像。当上传的文件名包含非ASCII字符(例如我这里使用的希伯来语)时,我无法获取该对象(似乎文件不存在,返回Forbidden)。
以下是我的一部分代码:
s3_client = boto3.client('s3')
def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
s3_client.download_file(bucket, key, "/tmp/somefile")
这引发了一个错误:
调用HeadObject操作时出错(403):禁止访问:ClientError
。我还看到日志中的键包含像%D7%92
这样的字符。按照某些来源(http://blog.rackspace.com/the-devnull-s3-bucket-hacking-with-aws-lambda-and-python/)所说,我也尝试对键进行解码,但是没有成功。
key = urllib.unquote_plus(record['s3']['object']['key'])
出现了同样的错误,不过这次日志显示我正在尝试检索具有类似于 פ×קס×
这样的字符的键。
请注意,已经验证此脚本可用于英文键,并且测试是在没有空格的键上进行的。