【问题标题】:Finding the source file path of a cffile upload查找cffile上传的源文件路径
【发布时间】:2024-04-16 23:00:02
【问题描述】:

如其他 cffile 上传问题所述,

GetPageContext().formScope().getUploadResource("myFormField").getName()

非常适合在实际执行 cffile 之前获取服务器上的文件名(对于 Railo 和 Lucee - ColdFusion 有不同的方法),但我注意到一个有趣的问题:如果浏览器是 IE,那么这将返回完整的源路径,包括文件名。另一方面,Firefox 和 Chrome 只返回文件名。

对于我的应用程序,我需要完整路径,但是当浏览器是 FireFox 或 Chrome 时,我无法找到它。如果有人有任何想法,我将不胜感激!

【问题讨论】:

  • 我不熟悉那种方法。它应该返回 client 文件属性还是 server 属性?这听起来像 client 信息 - 这不是您可以从服务器端控制的东西。 AFAIK it is whatever the browser vendor chooses to send.
  • 感谢您的参考 - 具有讽刺意味的是,该海报与我正在寻找的完全相反!
  • 您应该包含一个指向您问题的链接以供将来参考。

标签: coldfusion railo lucee


【解决方案1】:

(从 cmets 扩展而来)

我不熟悉getUploadResource() 函数。但是,查看this related thread,听起来它返回了客户端提交的文件信息。虽然有推荐的指导方针,但最终the value received on the server is whatever the browser chooses to send。它不是可以通过服务器端代码更改或控制的东西。因此,如果 Firefox 和 Chrome 返回的内容与 IE 不同,那你就倒霉了。

(顺便说一句,我个人一直觉得 Internet Explorer 在这方面有点奇怪。传统上浏览器是restricted from certain file access operations for security reasons,除非使用签名控件。所以你可能会认为这些限制会禁止浏览器提交有关客户端文件系统结构的信息。事实上,大多数浏览器在上传时提交路径信息,仅提交文件名。显然,Internet Explorer 选择做事..不同..不管什么原因)

对于我的应用程序,我需要完整路径

说了这么多,你为什么需要来自客户端机器的路径?

【讨论】:

  • 看来我目前注定要使用 IE(我将您的答案标记为正确)。但只是为了解释我为什么需要这个:我的 HD 上有一个工作副本,它模仿了我的开发和生产服务器上的目录结构。我编写了一个脚本,可以将文件从我的工作副本部署到 dev 或 prod 服务器,并保留对上传内容的审计跟踪。我需要完整的源路径,以便服务器端代码可以确定文件的位置。
  • 是的,IE 是我用过的唯一提供该信息的浏览器。顺便说一句,我使用的是一个遗留系统,它有一个类似的简单工具。但是,它不是依赖客户端路径,而是使用相对路径压缩一个或多个源文件。然后在提取和更新源时使用存档路径。不是最好的方法,但......确实支持部署多个带有审计的源文件。
  • 这是个狡猾的主意!
最近更新 更多