Recientemente he implementado un JS para subir multiples archivos a un servidor a través del siguiente código:
Código Javascript:
Ver original
function MultiSelector( list_target, max ){ this.list_target = list_target; this.count = 0; this.id = 0; if( max ){this.max = max; } else { this.max = -1;}; this.addElement = function( element ){ if( element.tagName == 'INPUT' && element.type == 'file' ){ element.name = 'file_' + this.id++; element.multi_selector = this; element.onchange = function(){ var new_element = document.createElement( 'input' ); new_element.type = 'file'; this.parentNode.insertBefore( new_element, this ); this.multi_selector.addElement( new_element ); this.multi_selector.addListRow( this ); this.style.position = 'absolute'; this.style.left = '-5000px'; }; if( this.max != -1 && this.count >= this.max ){ element.disabled = true; }; this.count++; this.current_element = element; } else { alert( 'Error: not a file input element' ); }; }; this.addListRow = function( element ){ var new_row = document.createElement( 'div' ); var new_row_button = document.createElement( 'input' ); new_row_button.className = 'btn'; new_row_button.value = ''; new_row.element = element; new_row_button.onclick= function(){ this.parentNode.element.parentNode.removeChild( this.parentNode.element ); this.parentNode.parentNode.removeChild( this.parentNode ); this.parentNode.element.multi_selector.count--; this.parentNode.element.multi_selector.current_element.disabled = false;return false; }; new_row.appendChild( new_row_button ); new_row.appendChild(document.createTextNode(element.value)); this.list_target.appendChild( new_row ); }; };
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
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
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
// Change the node's value by removing the fake path 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!