2010-05-11 4 views
43

¿Cómo puedo crear un selector de directorio en la página html?
Si utilizo el elemento del archivo de entrada, puedo seleccionar solo el archivo, pero necesito seleccionar el directorio.
Necesito hacer esto porque el usuario debe seleccionar una ruta correcta dentro de su computadora.
¿Alguna solución?Selector de directorio en la página HTML

+2

Ahora es posible con HTML5, al menos en chrome: http: // stackoverflow.com/questions/24718769/html5-javascript-how-to-get-the-selected-folder-name – mtyson

Respuesta

21

No se puede hacer en HTML/JavaScript puro por razones de seguridad.

La selección de un archivo para cargar es lo mejor que puede hacer, y aun así no obtendrá su ruta original completa en los navegadores modernos.

Es posible que pueda armar algo utilizando Java o Flash (por ejemplo, usando SWFUpload como base), pero es mucho trabajo y trae problemas de compatibilidad adicionales.

Otra idea sería la apertura de un iframe mostrando duro del usuario C: (o lo que sea), pero incluso si eso es posible hoy en día (podría ser bloqueada por razones de seguridad, no he probado en mucho tiempo), será imposible para tu web sitio para comunicarse con el iframe (nuevamente por razones de seguridad).

¿Para qué necesita esto?

+0

Lo necesito para seleccionar una ruta dentro de la computadora, no para subirla. Uso esta ruta para guardar el archivo, pero con la función JSP. – enfix

+2

@enfix ¿cómo se guardará un archivo de un servidor JSP en una ruta determinada en la computadora local del usuario? No entiendo. ¿Puedes editar tu pregunta para aclarar? –

+0

Necesito obtener la ruta donde el usuario desea guardar los archivos, pero los archivos se guardan con la invocación de la función java dentro de la página JSP. Esta función necesita una ruta donde guardar archivos. Eso es todo. Guardo más de un archivo, necesito crear carpetas y otras cosas con esta función java. – enfix

2

El guion es inevitable.

Esto no se proporciona debido al riesgo de seguridad. <input type='file' /> es el más cercano, pero no es lo que está buscando.

Pago this example que utiliza Javascript para lograr lo que desea.

Si el sistema operativo es Windows, puede usar VB scripts para acceder a los archivos de control central para buscar una carpeta.

46

Prueba de esto, creo que va a trabajar para usted:

<input type="file" webkitdirectory directory multiple/> 

Usted puede encontrar la demostración de esto en https://plus.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3, y si necesita más información puede encontrarla here.

+0

Tengo la impresión de que su sugerencia funciona para cargar la carpeta, sin obtener su ruta. –

+2

Esto funciona en firefox pero no en Chrome. –

+0

https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory para documentación. Se llama 'no estándar '. Y efectivamente carga los archivos contenidos recursivamente (?), También expone el nombre de la carpeta. Esto hará para la mayoría de los casos – Blauhirn

1

En caso de que usted sea el servidor y el usuario (por ejemplo, está creando una aplicación que funciona mediante el navegador y necesita elegir una carpeta) intente llamar al JFileChooser desde el servidor cuando se hace clic en el navegador

JFileChooser chooser = new JFileChooser(); 
chooser.setCurrentDirectory(new java.io.File(".")); 
chooser.setDialogTitle("select folder"); 
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
chooser.setAcceptAllFileFilterUsed(false); 

Este código es cortado con tijeras de here

0

hice un trabajo alrededor. Tenía un cuadro de texto oculto para mantener el valor. Luego, en form_onsubmit, copié el valor de la ruta, menos el nombre del archivo en la carpeta oculta. Luego, configure el cuadro fileInput en "". De esa forma, no se carga ningún archivo. No recuerdo el evento del control fileUpload. Quizás en cambio. Ha sido un tiempo. Si hay un valor, analizo el nombre del archivo y vuelvo a colocar la carpeta en la caja. Por supuesto, usted validaría que el archivo sea un archivo válido. Esto le daría la carpeta de la estación de trabajo de los clientes.
Sin embargo, si desea reflejar las rutas del servidor, eso requiere un enfoque de codificación completamente diferente.

+0

El usuario debería estar entrenado para elegir cualquier archivo. Está fastidiado. Pero, funciona en un apuro. Add y onchange = "parseFilePath()" al control FileUpload. function parseFileUploadPath() { var upl = document.getElementById ("<% = this.FileUpload1.ClientID%>"); if (upl.value! = "") { var pos = upl.value.lastIndexOf ("\\") document.getElementById ("<% = this.TextBox1.ClientID%>"). Value = upl. value.substr (0, pos) } } – user8004777

+0

Lo sentimos, HTML más completo. – user8004777

Cuestiones relacionadas