如何读取名称中带有加号和空格的存储桶中的对象

时间:2018-06-20 17:46:04

标签: amazon-web-services amazon-s3

我已经在Bucket(在AWS中)上设置了一个事件处理程序。该事件处理程序应该读取并处理该文件。而且我的文件名中带有空格的文件有问题。

当我上传名称为+ .txt的文件时,在事件处理程序上我收到了++.txt。我知道空格+取代了,但是如何区分空格和实际的加号?如何在事件处理程序中读取此类文件?

1 个答案:

答案 0 :(得分:1)

S3 完全相同对待+%20。它们在内部均表示为+。没有区别。 URI中未转义的空间违反协议,因此您的原始上载必须具有%20

foo+barfoo%20bar指的是完全相同的对象,其键为foo bar

要从事件中获取正确的对象键,您需要这样做:

const real_key = decodeURIComponent(event.s3.object.key.replace(/\+/g, ' '));

这是S3中一个非常老的错误的结果,并且当前的不正确行为在现有库中根深蒂固,无法修复而不会造成广泛的附带损害。

还请注意,{3}认为%2B不等同于+,但是由于浏览器不能那样逃避URL,因此用%2B存储对象键中的键不能很好地互操作。