【问题标题】:How to get the filename from a cfhttp get request?如何从 cfhttp 获取请求中获取文件名?
【发布时间】:2016-07-16 19:29:07
【问题描述】:

如果我运行以下代码从 Medium 的网站获取图像:

<cfhttp url="https://cdn-images-1.medium.com/max/600/1*3j1McX-y1rvKewzI2gWc_w.png" 
method="get" useragent="#CGI.http_user_agent#" getasbinary="yes">

然后我想用他们使用的相同名称保存图像,即1*3j1McX-y1rvKewzI2gWc_w.png

如何从 cfhttp 请求中获取文件名?我在 cfhttp.header 中查找了 content-disposition 属性的任何迹象,但找不到。

【问题讨论】:

  • 从请求的 URL 中获取文件名怎么样?
  • 我想知道文件名具有* 的事实是否会成为问题。您正在运行的操作系统是否允许使用 * 的文件名?
  • @Beginner 因为 URL 并不总是包含准确的文件名。它可以由他们的服务器以编程方式生成。我认为 Adob​​e Scene7 可以做到这一点。
  • @JamesAMohler 我打算做的是获取文件名,然后使用 REReplace 清理它以删除所有非字母数字字符
  • @Beginner 如何使用 content-disponsition 标头?

标签: coldfusion coldfusion-10 coldfusion-11


【解决方案1】:

假设您正在动态获取这些 URL,为什么不先将其解析为文件名,然后将其应用于文件名属性?

<cfset filename1 = ListLast("https://cdn-images-1.medium.com/max/600/1*3j1McX-y1rvKewzI2gWc_w.png","/") />

<cfhttp url="https://cdn-images-1.medium.com/max/600/1*3j1McX-y1rvKewzI2gWc_w.png" 
method="get" useragent="#CGI.http_user_agent#" getasbinary="yes" path="whateverpath" filename="#filename1#>

【讨论】:

  • 这是我最初想到的,但用户提供的许多 URL 不包含指向带有文件扩展名的图像文件名的直接链接。他们有时会指向一个奇怪的 URL,该 URL 会像 adobe scene7 一样动态生成图像
  • 我想不出更好的方法,所以选择了这个解决方案。谢谢 TRose,投票作为答案。
  • 下载文件后使用fileGetMimeType函数猜测文件扩展名以防万一。这是你唯一的机会。
  • @Alex 这正是我所做的 :) cfhttp.mimetype 给了我文件类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2021-03-07
相关资源
最近更新 更多