none
Se sustituye la ruta del archivo por C:\'fakepath, Obtener la ruta correctamente de un archivo RRS feed

  • Pregunta

  • Hola Saludos,

    Disculpen tengo un problema al subir archivo en un Input tipo File, en Internet Explorer obtengo la ruta del archivo correctamente, pero Google Chrome me parece C:\'fakepath\NombreArchivo.Extension, lo cual no me sirve porque necesito la ruta correctamente para poder convertiral en byte[].

    Este es mi codigo html

    <label for="ejemplo_archivo_1">Adjuntar un archivo</label>
                    <input type="file" id="ejemplo_archivo_1" class="upload-file"  name="fileToUpload">
        $('input[type=file]').change(function (event) {
        
            val = $(this).val().toLowerCase();
           // document = val;
            var regex = new RegExp("(.*?)\.(docx|doc|pdf|xlsx|xls|pptx|ppt|odt|odf|ods|bmp|mp3|wmv|mp4|wmv|mpg|avi|jpeg|jpg|png|rar|zip)$");
            filename = $('input[type=file]').val().split('\\').pop();
          
            extension = filename.split('.').pop();
            if (!(regex.test(val))) {
                $(this).val('');
                $('#fileName').val('');
                $('#ejemplo_archivo_1').val('');
                $('#modal-FiltroExtensionError').modal({
                    backdrop: 'static',
                    keyboard: false
                })
            }
            else if (regex.test(val)) {
    
                var size = checkSize(22020096);
                if (size == true) {
                    $('#fileName').show();
                    $('#fileName').val(filename);
                }
                else if (size == false) {
                    $('#ejemplo_archivo_1').val('');
                }
            }
        });

    En java script esto es lo que me muestra la ruta del archivo:

     val = $(this).val().toLowerCase();

    y en Google chrome me da una extension así: c:\fakepath\cpdescargaxls.zip'.

    mientras en Internet Explorer es esta forma:  c:\users\My\Carpeta\progressbarjqueryuiandsignalr.rar

    No se como sulucionar este detalle, si pudieran ayudarme les agradecería 

    Saludos 


    miércoles, 25 de noviembre de 2015 4:54

Todas las respuestas

  • La razón por la que Chrome no te da la ruta es por seguridad. De esa manera se evita que un servidor web pueda conocer la ruta que un archivo tenía en la máquina local del usuario, cosa que podría revelar al servidor información sobre ese PC (por ejemplo, se puede deducir el nombre del usuario local a partir de la carpeta que cuelga de c:\users).

    Así que Chrome tiene toda la razón, y hace bien en no enviarte esa ruta. Y tú haces mal en querer saberla desde el lado servidor; esa ruta local nunca deberías examinarla ni utilizarla para nada. Realmente, al servidor web no debería hacerle ninguna falta la ruta local que tenía el archivo en el PC que subió ese archivo al servidor.

    miércoles, 25 de noviembre de 2015 9:46
  • Entonces, ¿ cómo se puede seleccionar una imagen desde un input type="file", y usarla como fondo de un elemento (background-image) de forma dinámica, desde jQuery o JS, y que funcione en Chrome ?

    Parece bastante complicado, llevo buscando una solución y no encuentro nada.

    jueves, 8 de junio de 2017 2:46
  • Desde javascript lo que se hace es crear un new FileReader(), y llamar a su metodo readAsDataUrl pasandole como argumento el input.files[0]. Eso hace que en el evento onload del FileReader te devuelva un dataUrl que tiene dentro embebidos los datos binarios del fichero. Ese dataUrl se lo puedes asignar al src de una imagen, y la imagen se ve en pantalla. Me imagino (aunque nunca lo he probado) que tambien debe funcionar con el background-image.

    Tienes un ejemplo completo (usando un IMG) en la primera respuesta de esta pregunta:

    https://stackoverflow.com/questions/5802580/html-input-type-file-get-the-image-before-submitting-the-form

    jueves, 8 de junio de 2017 10:24