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:
- fichier1.xlsx
- fichier1.xls
- 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/
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" />
Ces jours-ci, vous pouvez simplement utiliser l'extension de fichier
<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>
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.
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
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" />
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.
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.
Maintenant, vous pouvez utiliser le nouvel attribut de validation d'entrée html5 pattern=".+\.(xlsx|xls|csv)"
.
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;
}