Cómo obtener la ruta del archivo desde el formulario de entrada HTML en Firefox 3
Tenemos un formulario HTML simple con <input type="file">
, como se muestra a continuación:
<form>
<label for="attachment">Attachment:</label>
<input type="file" name="attachment" id="attachment">
<input type="submit">
</form>
En IE7 (y probablemente en todos los navegadores famosos, incluido el antiguo Firefox 2), si enviamos un archivo como '//servidor1/ruta/al/archivo/nombre de archivo', funciona correctamente y proporciona la ruta completa al archivo y el nombre del archivo.
En Firefox 3, devuelve sólo 'nombre de archivo', debido a su nueva 'función de seguridad' para truncar la ruta, como se explica en el sistema de seguimiento de errores de Firefox ( https://bugzilla.mozilla.org/show_bug.cgi?id=143220 ) .
No tengo idea de cómo superar esta "nueva característica" porque hace que todos los formularios de carga en mi aplicación web dejen de funcionar en Firefox 3.
¿Alguien puede ayudar a encontrar una solución única para obtener la ruta del archivo tanto en Firefox 3 como en IE7?
Para la vista previa en Firefox funciona esto: el archivo adjunto es el objeto del elemento adjunto en el primer ejemplo:
if (attachment.files)
previewImage.src = attachment.files.item(0).getAsDataURL();
else
previewImage.src = attachment.value;
En realidad, justo antes de que saliera FF3, hice algunos experimentos y FF2 envía solo el nombre del archivo, como lo hizo Opera 9.0. Sólo IE envía la ruta completa. El comportamiento tiene sentido, porque el servidor no tiene que saber dónde almacena el usuario el archivo en su computadora, es irrelevante para el proceso de carga. ¡A menos que esté escribiendo una aplicación de intranet y obtenga el archivo mediante acceso directo a la red!
Lo que ha cambiado (y ese es el verdadero punto del error que señala) es que FF3 ya no permite el acceso a la ruta del archivo desde JavaScript. Y no permito escribir/pegar una ruta allí, lo cual es más molesto para mí: tengo una extensión de shell que copia la ruta de un archivo desde el Explorador de Windows al portapapeles y la uso mucho en esa forma. Resolví el problema usando la extensión DragDropUpload. Pero me temo que esto se sale de tema.
Me pregunto qué están haciendo sus formularios web para dejar de funcionar con este nuevo comportamiento.
[EDITAR] Después de leer la página vinculada por Mike, veo de hecho usos de la ruta en la intranet (identificar a un usuario, por ejemplo) y usos locales (mostrar vista previa de una imagen, administración local de archivos). El usuario Jam-es parece proporcionar una solución alternativa con nsIDOMFile (aún no probado).