HTML Input = "fichier" accepter le type de fichier D'attribut (CSV)

J'espérais que quelqu'un peut m'aider.

J'ai un objet de téléchargement de fichier sur ma page:

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

Avec les fichiers excel suivants sur mon bureau:

  1. fichier1.xlsx
  2. fichier1.xls
  3. fichier.csv

Je veux télécharger un fichier à SEULEMENT montrer .xlsx, .xls, & .csv les fichiers.

En utilisant l'attribut accept, j'ai trouvé que ces types de contenu étaient pris en charge .xlsx & .xls extensions...

accept= application/vnd.openxmlformats-officedocument.spreadsheetml.feuille (.XLSX)

accept= application/vnd.ms-excel (.XLS)

Cependant, je ne trouve pas le bon type de contenu pour un fichier Excel CSV! Toutes les suggestions?

Exemple: http://jsfiddle.net/LzLcZ/

341
demandé sur Ram 2012-08-06 21:18:50

9 réponses

Eh Bien, c'est embarrassant... J'ai trouvé la solution que je cherchais et cela ne pouvait pas être plus simple. J'ai utilisé le code suivant pour obtenir le résultat souhaité. Espérons que cela aide quelqu'un dans l'avenir. Merci à tous pour votre aide.

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

Types D'Acceptation Valides:

Pour les fichiersCSV (.csv), utiliser:

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

Pour Fichiers Excel 97-2003 (.xls), utiliser:

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

Pour Fichiers Excel 2007+ (.xlsx), l'utilisation:

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

Pour Les Fichiers Texte (.txt) utiliser:

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

Pour Les Fichiers Image (.png/.jpg / etc), Utiliser:

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

Pour les fichiers HTML (.htm,.html), utiliser:

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

Pour Les Fichiers Vidéo (.avi, .mpg, .mpeg,. mp4), utiliser:

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

Pour les fichiers Audio (. mp3,.wav, etc), Utiliser:

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

Pour fichiers PDF , utilisation:

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

DÉMO:
http://jsfiddle.net/dirtyd77/LzLcZ/144/


REMARQUE:

Si vous essayez d'Afficher des fichiers Excel CSV (.csv), faites non utilisation:

  • text/csv
  • application/csv
  • text/comma-separated-values (fonctionne dans Opera seulement).

Si vous essayez d'afficher un type de fichier particulier (par exemple, un WAV ou PDF), alors ce sera presque toujours travail...

 <input type="file" accept=".FILETYPE" />
910
répondu Dom 2016-03-30 05:15:08

Ces jours-ci, vous pouvez simplement utiliser l'extension de fichier

<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>
55
répondu Big Money 2017-09-19 20:21:48

Dom cet attribut est très ancien et n'est pas accepté dans les navigateurs modernes pour autant que je sache, mais voici une alternative, essayez ceci

<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);" />

Je suppose que cela vous aidera bien sûr, vous pouvez changer ce script en fonction de vos besoins.

33
répondu yogi 2012-08-06 17:54:04

J'ai utilisé text/comma-separated-values pour le type MIME CSV dans l'attribut accept et cela fonctionne bien dans Opera. Essayé text/csv sans chance.

Quelques autres MIME-Types pour CSV si le suggéré ne fonctionne pas:

  • texte/valeurs séparées par des virgules
  • texte/csv
  • application / csv
  • application / excel
  • application / vnd. ms-excel
  • application / vnd.msexcel
  • texte/anytext

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

8
répondu jaysponsored 2017-06-25 13:59:18

Cela n'a pas fonctionné pour moi sous Safari 10:

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

J'ai dû écrire ceci à la place:

<input type="file" accept="text/csv" />
6
répondu trojan 2017-04-04 08:01:16

Vous pouvez connaître le type de contenu correct pour n'importe quel fichier en procédant simplement comme suit:

1) Sélectionnez le fichier intéressé,

2) et exécutez dans la console ceci:

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

Vous pouvez également définir l'attribut "multiple" pour votre entrée pour vérifier le type de contenu pour plusieurs fichiers à la fois et faire ensuite:

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

Attribute accept a quelques problèmes avec plusieurs attributs et ne fonctionne pas correctement dans ce cas.

3
répondu opiumind 2017-02-08 11:57:26

J'ai modifié la solution de @yogi. L'ajout est que lorsque le fichier est de format incorrect, je réinitialise la valeur de l'élément d'entrée.

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;
}

J'ai buildin de vérification personnalisée, car dans la fenêtre Ouvrir un fichier, l'utilisateur peut toujours choisir les options "tous les fichiers (' * ' )", que je définisse explicitement l'attribut accept dans l'élément d'entrée.

1
répondu RenatoIvancic 2016-06-30 17:24:29

Maintenant, vous pouvez utiliser le nouvel attribut de validation d'entrée html5 pattern=".+\.(xlsx|xls|csv)".

0
répondu iiic 2016-06-15 10:20:22

Utiliser regex serait plus rapide

    function checkIsExcel(file) {
        if ((!/.*\.xlsx$/.test(file.name)) && (!/.*\.xls$/.test(file.name)) && (!/.*\.csv$/.test(file.name))) {
            return false;
        }
        return true;
    }
-1
répondu pimkle 2017-07-27 03:18:47