137 votes

Comment faire en sorte que jQuery limite les types de fichiers lors du téléchargement ?

J'aimerais que jQuery limite un champ de téléchargement de fichiers aux seuls formats jpg/jpeg, png et gif. Je fais une vérification en arrière-plan avec PHP déjà. Je fais passer mon bouton d'envoi par un JavaScript J'ai donc juste besoin de savoir comment vérifier les types de fichiers avant l'envoi ou l'alerte.

289voto

Paolo Bergantino Points 199336

Vous pouvez obtenir la valeur d'un champ de fichier de la même manière que n'importe quel autre champ. En revanche, vous ne pouvez pas la modifier.

Ainsi, 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!');
}

18 votes

Et le lier à votre formulaire : $("#my_upload_form").bind("submit", function() { // above check });

7 votes

Vous pourriez utiliser $('#file_field').change(function(){// above check});

3 votes

$("#my_upload_form").bind("submit", function() { // above check }); doit maintenant être lié en utilisant $("#my_upload_form").submit(function() { // above check }); api.jquery.com/submit . vous pouvez également empêcher la soumission du formulaire en utilisant $("#my_upload_form").submit(function(e) { // above check e.preventDefault(); });

44voto

Christian Points 181

Aucun plugin n'est nécessaire pour cette tâche. Je l'ai assemblé à 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 consiste à désactiver le bouton de téléchargement jusqu'à ce qu'un type de fichier valide soit sélectionné.

6 votes

Désolé mon frère, mais c'est une mauvaise regex. les fichiers sont autorisés à avoir des points dans leur nom. "giel.asd.aaaaa.jpg.png".match(/ \. (.+)$/)

27voto

Julian Aubourg Points 5495

Vous pouvez utiliser le plugin de validation pour jQuery : http://docs.jquery.com/Plugins/Validation

Il se trouve qu'il a une règle accept() qui fait exactement ce dont vous avez besoin : http://docs.jquery.com/Plugins/Validation/Methods/accept#extension

Notez que le contrôle de l'extension de fichier n'est pas infaillible car il n'est en aucun cas lié au mimetype du fichier. Vous pouvez donc avoir un .png qui est un document Word et un .doc qui est une image png parfaitement valide. N'oubliez donc pas d'ajouter des contrôles côté serveur ;)

0 votes

Pouvez-vous fournir un exemple d'utilisation avec plugins.krajee.com/file-input#option-allowedfileextensions sur IE11

19voto

Leo Points 801

Vous ne voulez pas vérifier plutôt sur MIME que sur n'importe quelle extension de l'utilisateur ? Si c'est le cas, c'est moins d'une ligne :

<input type="file" id="userfile" accept="image/*|video/*" required />

0 votes

N'obtient pas ce dont il a besoin. c'est juste pour une manipulation plus facile pour sélectionner une image dans un dossier avec une extension différente. comme vous pouvez le voir ici -> imageshack.us/a/img20/8451/switchzz.jpg

0 votes

Comme cela ne nuit pas à IE<10, et ne nuit pas à d'autres codes, c'est une restriction efficace de ce que vous essayez de restreindre.

5voto

vanessen Points 118

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X