我已经在Bucket(在AWS中)上设置了一个事件处理程序。该事件处理程序应该读取并处理该文件。而且我的文件名中带有空格的文件有问题。
当我上传名称为+ .txt
的文件时,在事件处理程序上我收到了++.txt
。我知道空格被+
取代了,但是如何区分空格和实际的加号?如何在事件处理程序中读取此类文件?
答案 0 :(得分:1)
S3 完全相同对待+
和%20
。它们在内部均表示为+
。没有区别。 URI中未转义的空间违反协议,因此您的原始上载必须具有%20
。
foo+bar
和foo%20bar
指的是完全相同的对象,其键为foo bar
。
要从事件中获取正确的对象键,您需要这样做:
const real_key = decodeURIComponent(event.s3.object.key.replace(/\+/g, ' '));
这是S3中一个非常老的错误的结果,并且当前的不正确行为在现有库中根深蒂固,无法修复而不会造成广泛的附带损害。
还请注意,{3}认为%2B
不等同于+
,但是由于浏览器不能那样逃避URL,因此用%2B
存储对象键中的键不能很好地互操作。