Amazon web services 如何读取名称中带有加号和空格的Bucket中的对象

Amazon web services 如何读取名称中带有加号和空格的Bucket中的对象,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我已经在Bucket上设置了一个事件处理程序(在AWS中)。事件处理程序应该读取并处理该文件。我对文件名中有空格的文件有问题 上载名为+.txt的文件时,在事件处理程序上收到+.txt。我知道空格被替换为+,但是我如何区分空格和实际的加号呢?如何在事件处理程序上读取这样的文件?S3将+和%20等同地处理。它们在内部都表示为+。没有区别。URI中未转载的空间违反了协议,因此原始上载的空间必须具有%20 foo+bar和foo%20bar指的是完全相同的对象,其键是foo-bar 要从事件中获取正确

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


上载名为
+.txt
的文件时,在事件处理程序上收到
+.txt
。我知道空格被替换为
+
,但是我如何区分空格和实际的加号呢?如何在事件处理程序上读取这样的文件?

S3将
+
%20
等同地处理。它们在内部都表示为
+
。没有区别。URI中未转载的空间违反了协议,因此原始上载的空间必须具有
%20

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

要从事件中获取正确的对象密钥,您需要:

const real_key = decodeURIComponent(event.s3.object.key.replace(/\+/g, ' '));
这是S3中一个非常老的错误的结果,当前的错误行为在现有库中根深蒂固,无法在不造成广泛附带损害的情况下修复


还要注意的是,S3并不认为
%2B
等同于
+
,但由于浏览器不以这种方式映射URL,存储键中带有
%2B
的对象的互操作性不好。

只需不上载名称中带有+和空格的文件即可。@Asdfg我不是上载文件的人,我不能确定用户是否会遵守这些限制!如果你友好地问他们,他们当然可以。:)只有当!:):)