java - AWS : how to fix S3 event replacing space with '+' sign in object key names in json

标签 java json amazon-web-services amazon-s3 aws-lambda

我有一个 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/

相关文章:

amazon-web-services - 为什么AWS KMS加密/解密不需要数据 key ?

java - 服务器上的 youtube 到 mp3 转换

java - Swing:确定拖动结束时包含的对象

java - 如何用java.Swing移动乒乓 Racket ?

php - PHP 中的 Fitbit API 响应处理

javascript - 使用 jQuery 在 javascript 中解析 JSON

json - 在 go 中比较两个 JSON

amazon-web-services - AWS : Mount S3 Bucket to an EC2 instance.(后来的 FTP 隧道)

amazon-web-services - 在 GraphicsMagick 中对流中的 pdf 第一页进行缩略图

用于翻译的 Java 可访问 Web 服务?