AWS:如何使用json中的对象键名称中的“+”符号来修复S3事件替换空间

问题描述 投票:12回答:2

我有一个lamba函数将对象从桶'A'复制到桶'B',一切正常,直到名为'New Text Document.txt'的对象在桶'A'中创建,json被构建在S3事件中,键为“键”:“新建+文本+文档.txt”。

空格被'+'取代。我知道这是一个已知的问题,通过网络搜索。但我不知道如何解决这个问题,传入的json本身有一个'+'和'+'实际上可以在文件名中。比如'New + Text Document.txt'。

所以我不能盲目地在我的lambda函数中用'''来'''。

由于此问题,当代码尝试在存储桶中查找文件时,无法找到它。

请建议。

java json amazon-web-services amazon-s3 aws-lambda
2个回答
8
投票

我遇到了这个寻找一个用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)

7
投票

我所做的是解决这个问题

java.net.URLDecoder.decode(b.getS3().getObject().getKey(), "UTF-8")


{
    "Records": [
        {
            "s3": {
                "object": {
                    "key": "New+Text+Document.txt"
                }
            }
        }
    ]
}

所以现在JSon值“New + Text + Document.txt”正确地转换为New Text Document.txt。

这已经解决了我的问题,如果这是非常正确的解决方案,请建议。是否会有任何可能破坏我的实施的角落案例。

© www.soinside.com 2019 - 2024. All rights reserved.