cfdirectory 在 S3 文件夹上的 action=list 时用 + 字符替换空格

cfdirectory replacing spaces with + characters when action=list on an S3 folder

我正在使用 cffile action="upload" 将名称中包含空格的文件上传到 Amazon S3。文件名为 burger+beans n beetroot.jpg。 如您所见,该名称包含空格和加号。

当我读取目录时,为了列出内容,ColdFusion在查询中返回的文件名是:burger+beans+n+beetroot.jpg。但是,当使用 Amazon S3 浏览器查看文件时,它被正确地列为:burger+beans n beetroot.jpg。所以看起来 ColdFusion 正在用 + 符号替换空格。

有谁知道为什么会发生这种情况,是否有办法禁用它?我尝试同时使用 DirectoryList() 方法和 <cfdirectory action="list"> 标记,两者都这样做。

请注意:我知道可以在处理之前清理文件名 - 这是一种解决方法,但不是我正在寻找的解决方案。谢谢!

尝试对文件名进行 URL 编码,这样 + 号将被转换为 url 编码的 space (%2b)。您可以使用 URLEncodedFormat,但请确保文件路径也未 url 编码。

我相信这不是 CF 问题,而是 S3 问题。他们发送他们的文件名转义。这使得它无法回答。

我在 S3 存储桶中创建了一个文件夹。然后我上传了一个名为 burger+beans n beetroot.jpg 的文件。我可以在 AWS 的控制台中看到正确命名的文件。我select它,然后在操作菜单select下载。我得到模态 window。查看浏览器页脚中的 URL - 文件名已转义。

我右键单击他们的 link 并选择 "Save Link As..." - 文件名也被转义了。

所以我认为一旦文件在那里,您就无能为力了。您需要在上传前清理它。我知道这不是你想听的。