我已经在我的存储桶上配置了事件,只要存储桶中有新对象,它就会触发消息为SQS。我的桶中的钥匙看起来像
'/model/invalid/SourceSystem/20160101/Monthly/SourceSystem/year=2018/month=01/day=02/test.csv'
在阅读来自sqs的消息时,我得到了响应
'/model/invalid/SourceSystem/20160101/Monthly/SourceSystem/year%3D2018/month%3D01/day%3D02/test.csv
截至目前我使用python代码用%3D
替换=
,但它似乎不是一个正确的解决方案
fileLocation = fileLocation.replace('%3D', '=')
这是预期和documented:
s3键提供有关事件中涉及的存储桶和对象的信息。请注意,对象keyname值是URL编码的。例如,
"red flower.jpg"
成为"red+flower.jpg"
。
至于解码URL编码的密钥,您可以使用urllib.unquote_plus:
用他们的单字符等价物替换
%xx
逃脱。 (_plus
后缀意味着它也会将+
解码为- s̳p̳a̳c̳e̳字符)
Python 2.x:
from urllib import unquote_plus as urldecode
# ...
fileLocation = urldecode(fileLocation)
Python xx:
from urllib.parse import unquote_plus as urldecode
# ...
fileLocation = urldecode(fileLocation)
它也可以这种方式完成
import urllib.parse
fileLocation ='/model/invalid/SourceSystem/20160101/Monthly/SourceSystem/year%3D2018/month%3D01/day%3D02/test.csv'
fileLocation = urllib.parse.unquote(fileLocation)