Foros del Web » Programando para Internet » Javascript »

C:\fakepath\file.ext ..... Falso directorio?

Estas en el tema de C:\fakepath\file.ext ..... Falso directorio? en el foro de Javascript en Foros del Web. Hola a todos... Recientemente he implementado un JS para subir multiples archivos a un servidor a través del siguiente código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : ...
  #1 (permalink)  
Antiguo 14/04/2012, 17:05
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Pregunta C:\fakepath\file.ext ..... Falso directorio?

Hola a todos...

Recientemente he implementado un JS para subir multiples archivos a un servidor a través del siguiente código:

Código Javascript:
Ver original
  1. function MultiSelector( list_target, max ){
  2.     this.list_target = list_target;
  3.     this.count = 0;
  4.     this.id = 0;
  5.     if( max ){this.max = max;
  6.     } else {
  7.         this.max = -1;};
  8.     this.addElement = function( element ){
  9.         if( element.tagName == 'INPUT' && element.type == 'file' ){
  10.             element.name = 'file_' + this.id++;
  11.             element.multi_selector = this;
  12.             element.onchange = function(){
  13.                 var new_element = document.createElement( 'input' );
  14.                 new_element.type = 'file';
  15.                 this.parentNode.insertBefore( new_element, this );
  16.                 this.multi_selector.addElement( new_element );
  17.                 this.multi_selector.addListRow( this );
  18.                 this.style.position = 'absolute';
  19.                 this.style.left = '-5000px';
  20.             };
  21.             if( this.max != -1 && this.count >= this.max ){
  22.                 element.disabled = true;
  23.             };
  24.             this.count++;
  25.             this.current_element = element;
  26.         } else {
  27.             alert( 'Error: not a file input element' );
  28.         };
  29.     };
  30.     this.addListRow = function( element ){
  31.         var new_row = document.createElement( 'div' );
  32.         var new_row_button = document.createElement( 'input' );
  33.             new_row_button.className = 'btn';
  34.         new_row_button.value = '';
  35.         new_row.element = element;
  36.         new_row_button.onclick= function(){
  37.             this.parentNode.element.parentNode.removeChild( this.parentNode.element );
  38.             this.parentNode.parentNode.removeChild( this.parentNode );
  39.             this.parentNode.element.multi_selector.count--;
  40.             this.parentNode.element.multi_selector.current_element.disabled = false;return false;
  41.         };
  42.         new_row.appendChild( new_row_button );
  43.         new_row.appendChild(document.createTextNode(element.value));
  44.         this.list_target.appendChild( new_row );
  45.     };
  46. };

Mi problemilla radica en, al parecer, un standar de HTML5 para proteger al usuario... No sé si os acordáis que en el campo para subir un archivo se imprime la ruta de ubicación del archivo en vuestro ordenador (p.ejemplo):

Código HTML:
Ver original
  1. C:\MisDocumentos\Mi_fichero_Personal\mi_Archivo.doc

Pues con el código de arriba, ahora (en algunos navegadores), puedo leer lo siguiente:

Código HTML:
Ver original
  1. C:\fakepath\mi_Archivo.doc

En algunas páginas JS he leído que el "fakepath" se puede eliminar fácilmente añadiendo algunas líneas en el JS para reemplazar la ruta por un simple espacio, de tal manera, que el usuario solamente lea el nombre del archivo que va a subir al servidor.

Algunas de ella dicen que debo añadir esto:

Código Javascript:
Ver original
  1. // Change the node's value by removing the fake path
  2. inputNode.value = fileInput.value.replace("C:\\fakepath\\", "");

Sin embargo, mi poca experiencia con JS me dice que no tengo idea de dónde poner esa línea o adaptarla a mi código.

Me podríais ayudar en este tema?

Gracias!
__________________
Andrew :P
  #2 (permalink)  
Antiguo 14/04/2012, 17:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: C:\fakepath\file.ext ..... Falso directorio?

Hola:

No se trata de HTML5, sino de seguridad... javascript no debe tener acceso al sistema de archivos... supongo que quieres mostrar esos datos, pero solo vale subirlos con el evento submit.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 14/04/2012, 17:16
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: C:\fakepath\file.ext ..... Falso directorio?

Eso quiere decir que no tengo otra alternativa?

La idea es que usuarios sin experiencia no crean que se trata de un falso directorio y cree confusión. Lo único que quiero mostrar es el nombre del archivo y no el directorio que lo contiene en su ordenador privado, es decir, en vez de 'c:\directorio1\directorio2\archivo.doc', solamente mostrat en pantalla 'archivo.doc'.

Aquí la posible solución: http://davidwalsh.name/fakepath
__________________
Andrew :P
  #4 (permalink)  
Antiguo 14/04/2012, 17:48
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: C:\fakepath\file.ext ..... Falso directorio?

OK!... Ya lo he resuelto. Solo basta con aplicar la solución propuesta a la línea del código precisa que imprime el nombre del archivo. En mi caso, es la línea N°43 del código de arriba:

Código Javascript:
Ver original
  1. new_row.appendChild(document.createTextNode(element.value));

Y siguiendo (acreditando respuestas) lo consejos de este foro: http://stackoverflow.com/questions/5...string-replace, solo he tenido que aplicarla de la siguiente manera:

Código Javascript:
Ver original
  1. new_row.appendChild(document.createTextNode(element.value.replace("C:\\fakepath\\", "")));

Y listo!... en los navegadores que da "problemas", solo me muestra lo que quiero: el archivo.

Saludos!

POST AUTORESUELTO
__________________
Andrew :P
  #5 (permalink)  
Antiguo 14/04/2012, 17:57
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: C:\fakepath\file.ext ..... Falso directorio?

Hacer eso implica que personalizes el campo input file
Yo en particular hago esto si no estoy usando jquery
http://foros.emprear.com/html/file-input/inx.html
Si usas jquery, esto
http://jsfiddle.net/angelfcm/nETSD/



Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 15/04/2012, 08:27
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 5 meses
Puntos: 317
Respuesta: C:\fakepath\file.ext ..... Falso directorio?

Cita:
Iniciado por caricatos Ver Mensaje
No se trata de HTML5, sino de seguridad... javascript no debe tener acceso al sistema de archivos... supongo que quieres mostrar esos datos, pero solo vale subirlos con el evento submit.
Es verdad. Y absolutamente lógico. Hasta dónde recuerdo, el único que cometía ese error era IE, pero ya fue corregido en las versiones 8+.

Sin embargo hay algo de cierto en lo que dice andrewp, para evitar esta intromisión, en HTML5 parece haber una recomendación que la limita. De ahí el invento del fakepath.

Y sí, sólamente cabe "mostrarlos" al usuario con una cadena "falsa". El envío del valor es inmodificable. Seguramente gracias a ese dato andrewp encontró la forma de simular el texto de la ruta usando su código. Aunque yo también entendí que quería manejar el valor real del archivo. No sé por qué.


Pero esto me lleva a ...

¿Para qué quieres cambiar la presentación, andrewp?

La excusa de prever "confusiones" es muy discutible. Ese método es del navegador, así que es al revés : si lo cambias, el usuario va a sospechar algo raro, y se puede poner receloso contra la página.
Por otro lado, es configurable; si quiere ver la ruta oculta, deja el default, y si quiere ver la ruta completa, lo cambia y ya.

Yo que tú, volvía las cosas a como estaban.



Estoy mirando un poco el archivo jquery.js, por eso caí aquí; no porque entienda de formularios. Y aprovecho tu ejemplo, emprear, para estudiar algo más.

hay forma de saber url actual de navegacion sistema de archivos??

Etiquetas: html, input, js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:46.