coldfusion - 如何使用文件参数获取 CFHTTP 以仅显示文件名而不是完整路径?

标签 coldfusion

我们正在尝试与需要文件的 RESTful Web 服务进行交互。

我将字段的名称设置为 data(根据 API 的要求),然后将文件指定为绝对路径。当文件到达服务器时,HTTP 事务中的文件名是完整的绝对路径。

这会导致 API 出现问题,因为完整路径随后被记录为“文件名”。

如何让 ColdFusion 只报告文件名而不是完整路径?

我们正在使用 ColdFusion 9。

这是 CFML:

<cfhttp url="http://server/testcode"
        port="9876"
        method="post"
        result="Content">

    <cfhttpparam    type="file"
                    name="data"
                    file="c:\temp\testfile.txt">
</cfhttp>

以下是 HTTP 与不同浏览器交互的一些示例:

CFHTTP 9
-------------------------------7d0d117230764
Content-Disposition: form-data; name="data"; filename="c:\temp\testfile.txt"
Content-Type: text/plain

This is the text, really long, well, not really.

-------------------------------7d0d117230764--



IE8
-----------------------------7db370d80e0a
Content-Disposition: form-data; name="FileField"; filename="C:\temp\testfile.txt"
Content-Type: text/plain

This is the text, really long, well, not really.
-----------------------------7db370d80e0a--


Chrome 13
------WebKitFormBoundaryDnpFVJwCsZkzTGDc
Content-Disposition: form-data; name="FileField"; filename="testfile.txt"
Content-Type: text/plain

This is the text, really long, well, not really.

Firefox 6
-----------------------------22798303036224
Content-Disposition: form-data; name="FileField"; filename="testfile.txt"
Content-Type: text/plain

This is the text, really long, well, not really.
-----------------------------22798303036224--

显然 IE8 和 CFHTTP 都做同样的事情(在文件名中添加“c:\temp”)。我不确定 HTTP 的规范是什么,但如果有办法让 CFHTTP 关闭路径,那就太好了。

有没有办法做到这一点?

最佳答案

我曾经遇到过与您类似的问题。我不在乎排除路径,但我想发送与服务器文件系统上的文件名不同的文件名。我根本找不到使用 CF 标记的方法,但我可以通过放入 Java 来让它工作。我使用了 CF9 IIRC 附带的 org.apache.commons.httpclient。它是这样的(请原谅任何拼写错误,我正在从更复杂的代码中转置):

oach = 'org.apache.commons.httpclient';
oachmm = '#oach#.methods.multipart';
method = createObject('java', '#oach#.methods.PostMethod').init(post_uri);
filePart = createObject('java', '#oachmm#.FilePart').init(
  'fieldname',
  'filename',
  createObject('java', 'java.io.File').init('filepath')
);
method.setRequestEntity(
  createObject('java', '#oachmm#.MultipartRequestEntity').init(
    [ filePart ],
    method.getParams()
  )
);
status = createObject('java', '#oach#.HttpClient').init().executeMethod(method);
method.releaseConnection();

关于coldfusion - 如何使用文件参数获取 CFHTTP 以仅显示文件名而不是完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400748/

相关文章:

Java JDK 问题或其他问题

multithreading - Coldfusion 对线程总数的限制

ColdFusion:对于经过身份验证的站点内的安全子目录来说,是否需要第二个 application.cfm?

javascript - ColdFusion.Window.create 回调处理程序问题

struct - Coldfusion Structinsert 正在覆盖原始插入的值

jquery - 如何正确输出CFC查询结果

coldfusion - 带循环和附件的 CFMAIL

regex - 如何在URL的isDefined()或structKeyExists()中使用通配符?

java - ColdFusion 启用 RMI over SSL 以解决数据管理问题

java - 需要从 jvm 中删除 fusionreactor 条目