Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/04/2012, 17:05
Avatar de andrewp
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