ColdFusion - Отправка файла в форму с помощью CFHTTP - PullRequest
2 голосов
/ 24 августа 2011

Я пытаюсь отправить 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.

Предложения? Любой вклад будет оценен!

Дополнительная информация: Я нахожусь на CF MX 6.1, если это имеет значение.

РЕДАКТИРОВАТЬ: После просмотра ввода ниже, я провел еще несколько испытаний.

Я могу подтвердить, что локальный файл является абсолютным путем (C: \ path_to_my_files \ test.xml).

Я не уверен, на чем работает целевая форма. Не знаю точно, но я не думаю, что это ColdFusion.

Я создал свою собственную тестовую страницу HTTP с помощью GetHTTPRequestData (), как упомянуто ниже, и я думаю, что это работает нормально, хотя выглядит немного странно для меня. Запись содержимого 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_files\test.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 ==

Здесь, кажется, я не передал файл.

Я все еще смотрю на это, но не вижу проблемы. Идеи?

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Когда вы указываете тип файла, тогда данные файла отправляются в теле сообщения, а не в имени поля формы, на которое вы можете ссылаться.Если вы проверяете LiveDocs на CFHTTPPARAM , в нем указывается атрибут type="file":

Абсолютный путь к файлу, который отправляется в теле запроса.

Итак, как сказал Ли, на вашей принимающей странице вам нужно использовать GetHttpRequestData, что-то вроде этого:

<cfset objRequest = GetHttpRequestData() />
<cfset object = objRequest.Content() />
2 голосов
/ 25 августа 2011

Если конечной точкой является страница 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\...\temp\wwwroot-tmp\neotmp6275345679234991.tmp 
USER_NAME test 

Примечание. Одно из различий в CF9 состояло в том, что getHttpRequestData().content пусто. Принимая во внимание, что под MX6 это все еще населено. Похоже, что 6.1 сохраняет копию данных (после ее обработки), а CF9 - нет. Не уверен почему.

...