Обновление : я нашел обходной путь. Если я отправляю фиктивное поле формы вместе с файлом, это работает. Это ошибка ColdFusion, или в спецификации HTTP указано, что формы должны содержать хотя бы одно нефайловое поле формы?
Обновление 2 : Я уверен, что это ошибка ColdFusion cfhttp. Это основано на ответе Ли и том факте, что я использовал приведенный ниже код для отправки формы с только элементом файла, используя javascript, и он отлично работает:
<form enctype="multipart/form-data" action="<cfoutput>#CGI.PATH_INFO#</cfoutput>" method="POST" name="theForm">
<input name="theFile" type="file" /><br/>
</form>
<a href="#" onclick="document.theForm.submit()">submit</a>
У меня проблема с загрузкой файлов с сервера ColdFusion на другой веб-сервер. Кажется, что cfhttpparam type="file"
без разбора добавляет новую строку (возврат каретки и перевод строки) в конец файла. Это ломает бинарные файлы. не происходит, когда я вручную загружаю файл через поле формы. Я пробовал с параметром mimetype и без него, и я пытался лгать о mimetype с различными двоичными форматами (exe, zip, jpg), но ничего не помогло. Есть какой-то параметр, который я пропускаю, или это ошибка в ColdFusion? (Я работаю на CF 8.0.1.195765 на WinXP.)
Ниже приведен тестовый код, который я использую, он просто загружает файл в тот же каталог. Загрузка вручную работает, но загрузка с сервера заканчивается добавлением CRLF в файл.
<cfset MyDir = "C:\test" />
<cfset MyFile = "test.zip" />
<cfif IsDefined("Form.TheFile")>
<cffile action="upload" fileField="theFile" destination="#MyDir#" nameConflict="MakeUnique" />
<cfelse>
<cfhttp url="http://#CGI.SERVER_NAME##CGI.SCRIPT_NAME#" method="POST" throwOnError="Yes">
<cfhttpparam type="file" name="theFile" file="#MyDir#\#MyFile#" />
</cfhttp>
</cfif>
<html><body>
<h2>Manual upload</h2>
<form enctype="multipart/form-data" action="<cfoutput>#CGI.PATH_INFO#</cfoutput>" method="POST">
<input name="theFile" type="file" /><br/>
<input type="submit" value="Submit" />
</form>
</body></html>