HTML Input = "archivo" Aceptar Atributo Tipo de archivo (CSV)


Esperaba que alguien me pudiera ayudar.

Tengo un objeto de carga de archivos en mi página:

<input type="file" ID="fileSelect" />

Con los siguientes archivos de excel en mi escritorio:

  1. file1.xlsx
  2. file1.xls
  3. archivo.csv

Quiero que el archivo se cargue a ONLY mostrar .xlsx, .xls, & .csv archivos.

Usando el atributo accept, encontré que estos tipos de contenido se encargaban de .xlsx & .xls extensiones...

accept= aplicación / vnd.openxmlformats-officedocument.spreadsheetml.hoja (.XLSX)

accept= aplicación / vnd. ms-excel (.XLS)

Sin embargo, no puedo encontrar el tipo de contenido correcto para un archivo CSV de Excel! Alguna sugerencia?

EJEMPLO: http://jsfiddle.net/LzLcZ /

Author: Ram, 2012-08-06

9 answers

Bueno, esto es vergonzoso... Encontré la solución que estaba buscando y no podía ser más simple. He utilizado el siguiente código para obtener el resultado deseado. Espero que esto ayude a alguien en el futuro. Gracias a todos por su ayuda.

<input id="fileSelect" type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />  

Tipos de aceptación válidos:

Para Archivos CSV (.csv), use:

<input type="file" accept=".csv" />

For Excel Files 97-2003 (.xls), use:

<input type="file" accept="application/vnd.ms-excel" />

Para Archivos de Excel 2007+ (.xlsx), uso:

<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />

Para Archivos de texto (.txt) uso:

<input type="file" accept="text/plain" />

Para Archivos de imagen (.png/.jpg/etc), use:

<input type="file" accept="image/*" />

Para Archivos HTML (.htm,.html), use:

<input type="file" accept="text/html" />

Para Archivos de vídeo (.avi, .mpg, .mpeg,. mp4), uso:

<input type="file" accept="video/*" />

Para Archivos de audio (. mp3, .wav, etc), uso:

<input type="file" accept="audio/*" />

Para Archivos PDF , uso:

<input type="file" accept=".pdf" /> 

DEMO:
http://jsfiddle.net/dirtyd77/LzLcZ/144 /


NOTA:

Si está tratando de mostrar archivos CSV de Excel (.csv), haga NO uso:

  • text/csv
  • application/csv
  • text/comma-separated-values (solo funciona en Ópera).

Si está tratando de mostrar un tipo de archivo particular (por ejemplo, un WAV o PDF), entonces esto casi siempre trabajo...

 <input type="file" accept=".FILETYPE" />
 910
Author: Dom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-30 05:15:08

En estos días solo puede usar la extensión de archivo

<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>
 55
Author: Big Money,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-19 20:21:48

Dom este atributo es muy antiguo y no es aceptado en los navegadores modernos que yo sepa, Pero aquí hay una alternativa a él, Pruebe esto

<script type="text/javascript" language="javascript">
function checkfile(sender) {
    var validExts = new Array(".xlsx", ".xls", ".csv");
    var fileExt = sender.value;
    fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
    if (validExts.indexOf(fileExt) < 0) {
      alert("Invalid file selected, valid files are of " +
               validExts.toString() + " types.");
      return false;
    }
    else return true;
}
</script>

<input type="file" id="file" onchange="checkfile(this);" />

Supongo que le ayudará, por supuesto, puede cambiar este script de acuerdo a sus necesidades.

 33
Author: yogi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-06 17:54:04

He usado text/comma-separated-values para el tipo mime CSV en el atributo accept y funciona bien en Opera. Intentado text/csv sin suerte.

Algunos otros tipos MIME para CSV si los sugeridos no funcionan:

  • valores de texto/separados por comas
  • texto / csv
  • aplicación/csv
  • aplicación/excel
  • application / vnd. ms-excel
  • application / vnd.msexcel
  • text / anytext

Fuente: http://filext.com/file-extension/CSV

 8
Author: jaysponsored,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-25 13:59:18

Esto no funcionó para mí bajo Safari 10:

<input type="file" accept=".csv" />

Tuve que escribir esto en su lugar:

<input type="file" accept="text/csv" />
 6
Author: trojan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-04 08:01:16

Puede saber el tipo de contenido correcto para cualquier archivo simplemente haciendo lo siguiente:

1) Seleccione el archivo interesado,

2) Y ejecutar en la consola esto:

console.log($('.file-input')[0].files[0].type);

También puede establecer el atributo "múltiple" para que su entrada verifique el tipo de contenido para varios archivos a la vez y haga lo siguiente:

for (var i = 0; i < $('.file-input')[0].files.length; i++){
    console.log($('.file-input')[0].files[i].type);
}

El atributo accept tiene algunos problemas con múltiples atributos y no funciona correctamente en este caso.

 3
Author: opiumind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 11:57:26

He modificado la solución de @yogi. La adición es que cuando el archivo es de formato incorrecto restablezco el valor del elemento de entrada.

function checkFile(sender, validExts) {
    var fileExt = sender.value;
    fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
    if (validExts.indexOf(fileExt) < 0 && fileExt != "") {
        alert("Invalid file selected, valid files are of " +
                 validExts.toString() + " types.");
        $(sender).val("");
        return false;
    }
    else return true;
}

Tengo una compilación de verificación personalizada, porque en la ventana abrir archivo el usuario todavía puede elegir las opciones "Todos los archivos ('*')", independientemente de si establezco explícitamente el atributo accept en el elemento de entrada.

 1
Author: RenatoIvancic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-30 17:24:29

Ahora puede usar el nuevo atributo de validación de entrada html5 pattern=".+\.(xlsx|xls|csv)".

 0
Author: iiic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-15 10:20:22

Usar expresiones regulares sería más rápido

    function checkIsExcel(file) {
        if ((!/.*\.xlsx$/.test(file.name)) && (!/.*\.xls$/.test(file.name)) && (!/.*\.csv$/.test(file.name))) {
            return false;
        }
        return true;
    }
 -1
Author: pimkle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 03:18:47