使用CFHTTP将文件发布到表单

我试图将XML文件发布到多部分HTML表单,它不起作用,我无法弄清楚问题所在。 看起来ColdFusion只是不传输文件。 我已经尝试发布到我需要发布的实际表单以及转储请求的测试页,并且所有通过的都是表单字段。

以下是我的代码的相关部分:

  <cfhttp url="#endPoint#" method="post" multipart="yes">
        <cfhttpparam type="formField" name="file_name" value="test.xml">
        <cfhttpparam type="formField" name="user_name" value="test">
        <cfhttpparam type="formField" name="password" value="test">
        <cfhttpparam type="file" name="test.xml" file="#localfile#">
    </cfhttp>

我可以确认endPoint指向一个有效的URL,formField名称/值是有效的,并且test.xml确实存在于由localfile指定的位置。

建议? 任何输入将不胜感激!

Add'l info:我在CF MX 6.1上,如果这有所作为。

编辑:在审查下面的输入后,我做了一些更多的测试。

我可以确认localfile是一个绝对路径(C: path_to_my_files test.xml)。

我不确定目标表单在运行什么。 我不确定,但我不认为它是ColdFusion。

我使用GetHTTPRequestData()构建了自己的HTTP测试页面,如下所述,我认为这很有效,尽管它看起来对我来说很陌生。 将GetHTTPRequestData()。内容写入文件可让我看到要发送的内容。 但是,最终表单仍然报告我没有包含文件。 Posttestserver.com也报告没有文件。 我在下面包含了我的页面和POST测试服务器的结果。

我的测试页结果:

-------------------------------7d0d117230764
Content-Disposition: form-data; name="file_name"
Content-Type: text/plain; charset=UTF-8

test.xml
-------------------------------7d0d117230764
Content-Disposition: form-data; name="user_name"
Content-Type: text/plain; charset=UTF-8

test
-------------------------------7d0d117230764
Content-Disposition: form-data; name="password"
Content-Type: text/plain; charset=UTF-8

test
-------------------------------7d0d117230764
Content-Disposition: form-data; name="test.xml"; filename="C:my_filestest.xml"
Content-Type: text/xml

%3C%3Fxml%20version%3D%221%2E0%22%20encoding%3D%22UTF%2D8%22%20%3F%3E%3CjobFeed%3E%3Cjob%3E%3CjobId%3E1234%3C%2FjobId%3E%3CjobTitle%3ETest%20Job%3C%2FjobTitle%3E%3CjobCity%3ETest%20City%3C%2FjobCity%3E%3CjobState%3ETest%20State%3C%2FjobState%3E%3CjobDescription%3ETest%20Description%3C%2FjobDescription%3E%3CjobZip%3E12345%3C%2FjobZip%3E%3CjobUrl%3Ehttp%3A%2F%2Fwww%2Etest%2Ecom%3C%2FjobUrl%3E%3CJobType%3ETEC%3C%2FJobType%3E%3C%2Fjob%3E%3C%2FjobFeed%3E


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

我不知道这个“------------------------------- 7d0d117230764”是什么。

这是我从测试网站得到的内容:

Headers (Some may be inserted by server)
UNIQUE_ID = TlZTra3sqvkAAECsSBsAAAAL
HTTP_HOST = www.posttestserver.com
HTTP_CONNECTION = close
HTTP_USER_AGENT = ColdFusion
HTTP_ACCEPT_ENCODING = deflate, gzip, x-gzip, compress, x-compress
CONTENT_TYPE = multipart/form-data; boundary=-----------------------------7d0d117230764
CONTENT_LENGTH = 1159
GATEWAY_INTERFACE = CGI/1.1
REQUEST_METHOD = POST
QUERY_STRING = 
REQUEST_URI = /post.php
REQUEST_TIME = 1314280365

Post Params:
key: 'file_name' value: 'test.xml'
key: 'user_name' value: 'test'
key: 'password' value: 'test'

== Begin post body ==

== End post body ==

这里看来我没有传输任何文件。

我仍在看它,但我没有看到问题。 想法?


如果endPoint是一个CF页面,那么我想知道是否有其他可能发生。 数据在请求正文中发送,是的。 但是对于CF页面,它仍然应该解析信息并为该文件创建一个表单域。 与常规表单上传相同。 在这种情况下,字段名称将是form["test.xml"] 。 这可能是问题的一部分吗?

CFDUMP结果在MX6.1和CF9下

FIELDNAMES FILE_NAME,USER_NAME,PASSWORD,TEXT.XML 
FILE_NAME test.xml 
PASSWORD test 
TEXT.XML C:CFusionMX...tempwwwroot-tmpneotmp6275345679234991.tmp 
USER_NAME test 

注意:CF9下的一个区别是getHttpRequestData().content是空的。 而在MX6下它仍然是人口稠密的。 看起来像6.1保留了数据的副本(处理后),但CF9没有。 不知道为什么。


当您指定文件类型时,文件数据将在文章正文中发送,而不是以可引用的表单字段名称发送。 如果您检查CFHTTPPARAM上的LiveDocs,它将声明type="file"属性:

在请求正文中发送的文件的绝对路径。

正如Leigh所说,在您的接收页面上,您需要使用GetHttpRequestData ,如下所示:

<cfset objRequest = GetHttpRequestData() />
<cfset object = objRequest.Content() />
链接地址: http://www.djcxy.com/p/31245.html

上一篇: Posting a file to a form with CFHTTP

下一篇: ColdFusion <cfselect> binding Error