Actualización: He encontrado una solución. Si envío un campo de formulario ficticio junto con el archivo, funciona. ¿Es esto un error de ColdFusion o hay algo en las especificaciones HTTP que dice que los formularios deben contener al menos un campo de formulario que no sea de archivo?Cargar un archivo con cfhttp agrega una nueva línea (incluso en archivos binarios)
Actualización 2: Estoy convencido de que se trata de un error ColdFusion cfhttp. Esto se basa en la respuesta de Leigh y el hecho de que he utilizado el código de abajo para enviar un formulario con única el elemento de archivo usando Javascript, y funciona bien:
<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>
Estoy corriendo en una problema al cargar archivos de un servidor ColdFusion a otro servidor web. Parece que cfhttpparam type="file"
agrega indiscriminadamente una nueva línea (retorno de carro y avance de línea) al final del archivo. Esto está rompiendo archivos binarios. Esto no ocurre cuando subo manualmente el archivo a través del campo de formulario. Lo he intentado con y sin el parámetro mimetype, y he intentado mentir sobre el tipo de letra mimet con varios formatos binarios (exe, zip, jpg), pero nada ha funcionado. ¿Hay algún parámetro que me falta o es un error en ColdFusion? (Me estoy ejecutando en CF 8.0.1.195765 en WinXP.)
A continuación se muestra el código de prueba que estoy usando, simplemente carga el archivo en el mismo directorio. La carga manual funciona, pero la carga basada en el servidor termina agregando un CRLF al archivo.
<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>
Recuerdo ese problema. No estoy seguro acerca de las especificaciones, pero mi _guess_ en ese momento era un problema. Con suerte, alguien más tiene una respuesta más definitiva. – Leigh
Supongo que se trata de un problema de navegador o http, no es un problema con CF. Hubo un problema similar en IE en Mac Classic (sí, ha pasado un tiempo) que agregaría nuevas líneas a cualquier formulario multipart/mime. Supongo que este es un problema similar, menos intrusivo. la acción de carga es solo una copia de archivo del manejador de archivo proporcionado por el servidor web (IIS, Apache, etc.) –
Su sugerencia tendría más sentido. Pero todavía me estoy inclinando hacia el problema de cfhttp. Acabo de probarlo con la versión de desarrollador (servidor web incorporado) y obtuve los mismos resultados de archivos dañados con IE y FF. – Leigh