106 votes

Obtenez la taille du fichier, la largeur et la hauteur de l'image avant le téléchargement.

Comment puis-je obtenir la taille du fichier, la hauteur et la largeur de l'image avant de la télécharger sur mon site web, avec jQuery ou JavaScript ?

1voto

Russell Durham Points 368

Pour autant que je sache, il n'y a pas de moyen facile de le faire puisque Javascript/JQuery n'a pas accès au système de fichiers local. Il y a quelques nouvelles fonctionnalités dans html 5 qui vous permettent de vérifier certaines méta-données telles que la taille du fichier mais je ne suis pas sûr que vous puissiez obtenir les dimensions de l'image.

Voici un article que j'ai trouvé concernant les fonctionnalités de html 5, et une solution pour IE qui implique l'utilisation d'un contrôle ActiveX. http://jquerybyexample.blogspot.com/2012/03/how-to-check-file-size-before-uploading.html

1voto

Stardust Points 445

J'ai donc commencé à expérimenter les différentes possibilités offertes par l'API FileReader et j'ai pu créer une balise IMG avec une URL de données.

Inconvénient : Il ne fonctionne pas sur les téléphones mobiles, mais il fonctionne bien sur Google Chrome.

$('input').change(function() {

    var fr = new FileReader;

    fr.onload = function() {
        var img = new Image;

        img.onload = function() { 
//I loaded the image and have complete control over all attributes, like width and src, which is the purpose of filereader.
            $.ajax({url: img.src, async: false, success: function(result){
                    $("#result").html("READING IMAGE, PLEASE WAIT...")
                    $("#result").html("<img src='" + img.src + "' />");
                console.log("Finished reading Image");
                }});
        };

        img.src = fr.result;
    };

    fr.readAsDataURL(this.files[0]);

});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" accept="image/*" capture="camera">
<div id='result'>Please choose a file to view it. <br/>(Tested successfully on Chrome - 100% SUCCESS RATE)</div>

(voir ceci sur un jsfiddle à l'adresse suivante http://jsfiddle.net/eD2Ez/530/ )
(voir le jsfiddle original que j'ai ajouté à l'adresse suivante http://jsfiddle.net/eD2Ez/ )

0voto

Un exemple fonctionnel de validation jQuery :

   $(function () {
        $('input[type=file]').on('change', function() {
            var $el = $(this);
            var files = this.files;
            var image = new Image();
            image.onload = function() {
                $el
                    .attr('data-upload-width', this.naturalWidth)
                    .attr('data-upload-height', this.naturalHeight);
            }

            image.src = URL.createObjectURL(files[0]);
        });

        jQuery.validator.unobtrusive.adapters.add('imageminwidth', ['imageminwidth'], function (options) {
            var params = {
                imageminwidth: options.params.imageminwidth.split(',')
            };

            options.rules['imageminwidth'] = params;
            if (options.message) {
                options.messages['imageminwidth'] = options.message;
            }
        });

        jQuery.validator.addMethod("imageminwidth", function (value, element, param) {
            var $el = $(element);
            if(!element.files && element.files[0]) return true;
            return parseInt($el.attr('data-upload-width')) >=  parseInt(param["imageminwidth"][0]);
        });

    } (jQuery));

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