Así es como lo hacemos. Básicamente, hay un campo de archivo y un campo de cadena. JavaScript toma el nombre del archivo desde el navegador antes de enviar el formulario. Obviamente, debe verificar que el nombre de archivo en el otro extremo esté realmente presente (estará en blanco si el usuario tiene JavaScript desactivado, por ejemplo) y deberá analizar la cadena para manejar las diferencias de plataforma (/users/bob/file.jpg
versus C:\Documents and Settings\bob\file.jpg
)
<script>
function WriteClientFileName(){
$('ClientFileName').value = $('ClientFile').value;
}
</script>
<form enctype="multipart/form-data" onsubmit="WriteClientFileName();">
<input type="File" name="ClientFile" id="ClientFile">
<input type="hidden" name="ClientFileName" id="ClientFileName" value="">
<input type="submit">
</form>
Por cierto, esta técnica es en varios idiomas. Funcionará igual de bien en RoR, PHP, JSP, etc.
Edit: Si un usuario está "empuñando un FireBug feroz" ¿cuál es el problema? Incluso si no tienen Firebug, aún pueden cambiar el nombre del archivo en su extremo y cambiar la entrada. Además, estás validando tus entradas, ¿verdad?
lo extraordinariamente típico de ColdFusion no tienen tal funcionalidad básica. – Teekin