J'aimerais que jQuery limite le champ de téléchargement de fichier à jpg/jpeg, png et gif. Je suis déjà en train de vérifier le système avec PHP
. J'utilise déjà le bouton d'envoi via une fonction JavaScript
. Il me faut donc vraiment savoir comment vérifier les types de fichiers avant de le soumettre ou de l'alerter.
Vous pouvez obtenir la valeur d'un champ de fichier de la même manière que n'importe quel autre champ. Vous ne pouvez pas le modifier, cependant.
Donc pour superficiellement vérifier si un fichier a la bonne extension, vous pouvez faire quelque chose comme ceci:
var ext = $('#my_file_field').val().split('.').pop().toLowerCase();
if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
alert('invalid extension!');
}
Aucun plugin nécessaire pour cette tâche. Cobbled cela à partir de quelques autres scripts:
$('INPUT[type="file"]').change(function () {
var ext = this.value.match(/\.(.+)$/)[1];
switch (ext) {
case 'jpg':
case 'jpeg':
case 'png':
case 'gif':
$('#uploadButton').attr('disabled', false);
break;
default:
alert('This is not an allowed file type.');
this.value = '';
}
});
L'astuce ici consiste à définir le bouton de téléchargement sur désactivé, sauf si et jusqu'à ce qu'un type de fichier valide soit sélectionné.
Vous pouvez utiliser le plugin de validation pour jQuery: http://docs.jquery.com/Plugins/Validation
Il se trouve qu’une règle accept () fait exactement ce dont vous avez besoin: http://docs.jquery.com/Plugins/Validation/Methods/accept#extension
Notez que contrôler l’extension de fichier n’est pas infaillible car il n’a aucun lien avec le type MIME du fichier. Donc, vous pourriez avoir un fichier .png qui est un document Word et un fichier .doc qui est une image png parfaitement valide. Alors n'oubliez pas de faire plus de contrôles côté serveur;)
Pour le front-end, il est très pratique de mettre l'attribut ' accept ' si vous utilisez un champ de fichier.
Exemple:
<input id="file" type="file" name="file" size="30"
accept="image/jpg,image/png,image/jpeg,image/gif"
/>
Quelques remarques importantes:
Vous ne voulez pas vérifier plutôt sur MIME que sur n'importe quelle extension que l'utilisateur ment? Si c'est le cas, c'est moins d'une ligne:
<input type="file" id="userfile" accept="image/*|video/*" required />
pour mon cas, j'ai utilisé les codes suivants:
if (!(/\.(gif|jpg|jpeg|tiff|png)$/i).test(fileName)) {
alert('You must select an image file only');
}
J'essaie d'écrire un exemple de code de travail, je le teste et tout fonctionne.
Lièvre c'est le code:
HTML:
<input type="file" class="attachment_input" name="file" onchange="checkFileSize(this, @Model.MaxSize.ToString(),@Html.Raw(Json.Encode(Model.FileExtensionsList)))" />
Javascript:
//function for check attachment size and extention match
function checkFileSize(element, maxSize, extentionsArray) {
var val = $(element).val(); //get file value
var ext = val.substring(val.lastIndexOf('.') + 1).toLowerCase(); // get file extention
if ($.inArray(ext, extentionsArray) == -1) {
alert('false extension!');
}
var fileSize = ($(element)[0].files[0].size / 1024 / 1024); //size in MB
if (fileSize > maxSize) {
alert("Large file");// if Maxsize from Model > real file size alert this
}
}
Cet exemple permet de télécharger une image PNG uniquement.
HTML
<input type="file" class="form-control" id="FileUpload1" accept="image/png" />
JS
$('#FileUpload1').change(
function () {
var fileExtension = ['png'];
if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) {
alert("Only '.png' format is allowed.");
this.value = ''; // Clean field
return false;
}
});
Ce code fonctionne bien, mais le seul problème est que si le format de fichier est autre que les options spécifiées, il affiche un message d’alerte mais le nom du fichier est affiché alors qu’il devrait être négligé.
$('#ff2').change(
function () {
var fileExtension = ['jpeg', 'jpg', 'pdf'];
if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) {
alert("Only '.jpeg','.jpg','.pdf' formats are allowed.");
return false; }
});
<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="submit" value="Upload" />
</form>
<script>
$('input[type=file]').change(function(){
var file = this.files[0];
name = file.name;
size = file.size;
type = file.type;
//your validation
});
</script>
Si vous avez affaire à plusieurs téléchargements de fichiers (html 5), j'ai pris le commentaire suggéré en haut et je l'ai légèrement modifié:
var files = $('#file1')[0].files;
var len = $('#file1').get(0).files.length;
for (var i = 0; i < len; i++) {
f = files[i];
var ext = f.name.split('.').pop().toLowerCase();
if ($.inArray(ext, ['gif', 'png', 'jpg', 'jpeg']) == -1) {
alert('invalid extension!');
}
}