ColdFusion-使用CFHTTP将文件发布到表单

ColdFusion-使用CFHTTP将文件发布到表单,coldfusion,Coldfusion,我正试图将一个XML文件发布到一个多部分HTML表单中,但它不起作用,我无法找出问题所在。看来ColdFusion只是没有传输文件。我已经尝试过发布到我需要发布到的实际表单,以及转储请求的测试页面,所有这些都是表单字段 以下是我代码的相关部分: <cfhttp url="#endPoint#" method="post" multipart="yes"> <cfhttpparam type="formField" name="file_name" value

我正试图将一个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>
我不知道这是什么-----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 ==
在这里,我似乎没有传送任何文件


我还在看,但我看不出问题所在。Ideas?

当您指定一种文件类型时,文件数据将在帖子正文中发送,而不是以您可以引用的表单字段名发送。如果检查类型=文件属性的it状态:

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

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

<cfset objRequest = GetHttpRequestData() />
<cfset object = objRequest.Content() />

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

MX6.1和CF9下的CFDUMP结果


注意:CF9下的一个区别是getHttpRequestData.content为空。而在MX6下,它仍然被填充。似乎6.1在处理数据后保留了数据的副本,但CF9没有。不知道为什么。

在6.1下对我来说很好。有没有可能是别的什么东西在干扰呢。getHttpRequestData报告什么?在开始和结束文章正文之间是否有内容?位是多部分边界,服务器知道一种新类型的数据正在通过该边界。这样,它就知道表单字段中的一位数据在哪里停止,而您要发送的文件中的下一位数据在哪里开始。您所看到的是正确的,您只需要理解,一个二进制文件实际上并没有包含在表单字段中。文件名可以在相应的表单字段中发送,但文件本身是作为帖子正文的一部分发送的。好的,我理解你对文件和帖子正文的看法。我只是错过了一个你和利要表达的重要观点?根据我的文档和一些谷歌搜索,我用标签做的应该很好。我的意思是,我的CF页面收到了消息正文,我不明白为什么外部页面没有。我不认为你是误解。据我所见,我们确认了CF发送文件的两种方式。您确定Posttestserver.com的工作方式符合您的预期吗?我刚刚用一个正则表达式做了同样的尝试,结果显示:3个post变量。Post正文长度为0个字符。这可能是一个愚蠢的问题,但posttestserver.com是否处理多部分文件上载?据我所知,它似乎只处理简单的表单参数,而不是文件。它确实识别作为请求主体提交的文件,这与ie有点不同。但它似乎没有确认/处理多部分文件上载。你是说我应该尝试将我的文件指定为表单字段吗?我试过了,但没有成功,结果和上面一样。编辑没有。我说原始代码对我来说很好,建议你先在CF页面上测试一下,确认没有明显的问题。A应该显示与我在上面发布的相同的信息。。但根据您的更新,您似乎已经确认请求中包含该文件。
<cfset objRequest = GetHttpRequestData() />
<cfset object = objRequest.Content() />
FIELDNAMES FILE_NAME,USER_NAME,PASSWORD,TEXT.XML 
FILE_NAME test.xml 
PASSWORD test 
TEXT.XML C:\CFusionMX\...\temp\wwwroot-tmp\neotmp6275345679234991.tmp 
USER_NAME test