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 que le fichier soit téléchargé sur SEULEMENT montre .xlsx
, .xls
, & .csv
fichiers.
En utilisant l'attribut accept
, j'ai trouvé que ces types de contenu prenaient en charge les extensions .xlsx
& .xls
...
accept
= application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (.XLSX)
accept
= application/vnd.ms-Excel (.XLS)
Cependant, je ne trouve pas le type de contenu correct pour un fichier Excel CSV! Aucune suggestion?
EXEMPLE: http://jsfiddle.net/LzLcZ/
Eh bien, c’est embarrassant ... J'ai trouvé la solution que je cherchais et cela ne pourrait être plus simple. J'ai utilisé le code suivant pour obtenir le résultat souhaité. J'espère que cela aidera quelqu'un dans le futur. Merci à tous pour votre aide.
<input id="fileSelect" type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-Excel" />
Pour CSV fichiers (.csv), utilisez:
<input type="file" accept=".csv" />
Pour Excel Files 97-2003 (.xls), utilisez:
<input type="file" accept="application/vnd.ms-Excel" />
Pour Excel Files 2007 + (.xlsx), utilisez:
<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
Pour Fichiers texte (.txt), utilisez:
<input type="file" accept="text/plain" />
Pour Fichiers d'image (.png/.jpg/etc), utilisez:
<input type="file" accept="image/*" />
Pour fichiers HTML (.htm, .html), utilisez:
<input type="file" accept="text/html" />
Pour Fichiers vidéo (.avi, .mpg, .mpeg, .mp4), utilisez:
<input type="file" accept="video/*" />
Pour Fichiers audio (.mp3, .wav, etc.), utilisez:
<input type="file" accept="audio/*" />
Pour fichiers PDF , utilisez:
<input type="file" accept=".pdf" />
DEMO:
http://jsfiddle.net/dirtyd77/LzLcZ/144/
NOTE:
Si vous essayez d’afficher des fichiers CSV Excel (.csv
), faites PAS utilisation:
text/csv
application/csv
text/comma-separated-values
( ne fonctionne que dans Opera seulement ).Si vous essayez d'afficher un type de fichier particulier (par exemple, un WAV
ou PDF
), cela fonctionnera presque toujours ...
<input type="file" accept=".FILETYPE" />
Ces jours, 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é par les navigateurs modernes à ma connaissance, 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 entendu à modifier 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 très bien dans Opera. Essayé text/csv
sans chance.
Quelques autres types MIME pour CSV si les suggestions ne fonctionnent pas:
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 tout fichier en procédant simplement comme suit:
1) Sélectionnez le fichier intéressé,
2) Et lancez en console ceci:
console.log($('.file-input')[0].files[0].type);
Vous pouvez également définir l'attribut "multiple" pour votre entrée afin de vérifier le type de contenu pour plusieurs fichiers à la fois, puis procédez comme suit:
for (var i = 0; i < $('.file-input')[0].files.length; i++){
console.log($('.file-input')[0].files[i].type);
}
L'attribut accept a des problèmes avec l'attribut multiple et ne fonctionne pas correctement dans ce cas.
J'ai modifié la solution de @yogi. En plus, lorsque le fichier a un 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 une construction de vérification personnalisée, car dans la fenêtre de fichier ouvert, l'utilisateur peut toujours choisir les options "Tous les fichiers ('*')", que je définisse explicitement l'attribut accept dans l'élément input.
Vous pouvez maintenant utiliser le nouvel attribut de validation d'entrée html5 pattern=".+\.(xlsx|xls|csv)"
.