我有一个 lamba 函数,可以将对象从存储桶“A”复制到存储桶“B”,并且一切正常,直到在存储桶“A”中创建了名称为“New Text Document.txt”的对象,json内置于 S3 事件中,键为“key”:“New+Text+Document.txt”。
空格被替换为“+”。通过在网络上搜索,我知道这是一个已知问题。 但我不确定如何解决这个问题,传入的 json 本身有一个“+”,而“+”实际上可以在文件名中。比如“新建+文本文档.txt”。
所以我不能盲目地在我的 lambda 函数中将“+”与“”隔开。
由于这个问题,当代码尝试在存储桶中查找文件时,找不到它。
请提出建议。
最佳答案
我在寻找用 python 而不是 java 编写的 lambda 的解决方案时遇到了这个问题; “urllib.parse.unquote_plus”对我有用,它正确处理了包含空格和 + 号的文件:
from urllib.parse import unquote_plus
import boto3
bucket = 'testBucket1234'
# uploaded file with name 'foo + bar.txt' for test, s3 Put event passes following encoded object_key
object_key = 'foo %2B bar.txt'
print(object_key)
object_key = unquote_plus(object_key)
print(object_key)
client = boto3.client('s3')
client.get_object(Bucket=bucket, Key=object_key)
关于java - AWS : how to fix S3 event replacing space with '+' sign in object key names in json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44779042/