IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Impossible d'obtenir la taille d'un fichier


Sujet :

jQuery

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Impossible d'obtenir la taille d'un fichier
    Bonjour

    J'utilise le code suivant pour obtenir la taille des fichiers à partir de mon foumulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $("input[type='file']").each(function(index,inputFile) {
          formData.append(inputFile.name, inputFile.files[0]);
     console.log("le nom est :"+inputFile.name);
          console.log("la taille est :"+inputFile.size);
       });
    Sauf que quelque soit la taille du fichier, j'obtiens le message suivant:

    la taille est :20
    Et lorsque je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log("la taille est :"+inputFile.files[0].size);
    J'obtiens le message d'erreur suivant:

    Uncaught TypeError: Cannot read property 'size' of undefined
    Comment faire pour avoir la taille du fichier?

    Merci

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    Salut,
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <input type="file" />
    <button>Get File infos</button>

    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
      //avec change
      $('[type="file"]').change(function(inputFile){
    	if(this.files[0]||inputFile.currentTarget.files[0]){
    	  console.log("this.files[0].size :",this.files[0].size
    		," this.files[0].name",this.files[0].name
    		,", $(this).get(0).files[0].size :",$(this).get(0).files[0].size
    		,", $(this).get(0).files[0].name :",$(this).get(0).files[0].name
    		," inputFile.currentTarget.files[0].size :"+inputFile.currentTarget.files[0].size
    		," inputFile.currentTarget.files[0].name :",inputFile.currentTarget.files[0].name);
    	}
    	  else{console.log('aucun fichier choisi');}
      });
     
      //avec click sur le bouton
      $('button').click(function(){
       $("[type='file']").each(function(index,inputFile) {
    	  if(inputFile.files[0]){
    		console.log('inputFile.size :',inputFile.files[0].size
    		," inputFile.name :",inputFile.files[0].name
    		," $(inputFile).get(0).files[0].size :",$(inputFile).get(0).files[0].size
    		," $(inputFile).get(0).files[0].name :",$(inputFile).get(0).files[0].name);
    	  }
    	  else {
    		console.log("Aucun fichier choisi");
    	  }
       });

  3. #3
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ok merci beaucoup, ça marche.

    Mais si je ne veux pas utiliser la boucle each, c'est-à-dire faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input type="file" class="custom-file-input" id="monFichier" name="fichier">
     
    alert ($('#monFichier).get(0).files.size);
    J'ai le message suivant au niveau de la console:

    undefined

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#monFichier").get(0).files[0].size

  5. #5
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ok je vois, merci ça marche. Sauf que quand j'essaie de combiner avec le 1er code que tu m'as donné, ça ne marche pas. Je voudrais, en effet, afficher un message d'erreur lorsque le champ file est vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($("#monFichier").files[0]){
    	console.log($("#monFichier").get(0).files[0].size);
      }
      else {
    	console.log("Aucun fichier choisi");
      }
    Sauf que j'ai le message d'erreur suivant:

    TypeError: $(...).files is undefined

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($("#monFichier").get(0).files[0]){...}

  7. #7
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ça marche, merci beaucoup.

  8. #8
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Une dernière chose, je n'arrive plus à ajouter mon fichier dans le Formdata:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var fich = $("#monFichier").get(0).files[0];
    if(fich)
    {
        var a = fich.size;
        if (a > 2097152)
        {
            console.log("Désolé, Le fichier dépasse 2 Mo");
        }
        else
        {
            formData.append(fich.name, fich);
        }
     
      }
    Tous les fichiers que j'ajoute sont considérés comme vides.

    Avant je faisais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $("input[type='file']").each(function(index,inputFile) {
         formData.append(inputFile.name, inputFile.files[0]);
         console.log("les nom du fichier est :"+inputFile.name);
      });

  9. #9
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    tu veux envoyer le/les fichier(s) vers un script php en passant par $.ajax ?

  10. #10
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Je voudrais envoyer le fichier vers une servlet, voici ce que je faisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    $(function() {
     
    //Current request reference; can be used else where
    var request;
     
    /* attach a submit handler to the form */
    $(".btn_valider").click(function(event) {
        // abort any pending request
        if (request) {
            request.abort();
        }
      /* stop form from submitting normally */
      event.preventDefault();
     
      /*clear result div*/
       $("#result").html('');
     
       var formData = new FormData();
     
    var annee = $('#form1 input[name="annee"]').val();
    var mois = $('#form1 select[name="mois"]').val();
     
    formData.append('annee', annee);
    formData.append('mois', mois);
     
    $("input[type='file']").each(function(index,inputFile) {
         formData.append(inputFile.name, inputFile.files[0]);
         console.log("les nom du fichier est :"+inputFile.name);// exemple pour un champ monofichier, sinon il faut parcourir le tableau et créer un tableau avec chaque fichier dedans
      });
      */
     
      }
     
    /* Send the data using post and put the results in a div */
      request =$.ajax({
          url: "ajoutJournal",
          type: "POST",
          enctype: 'multipart/form-data',
          data:  formData,
          processData: false,
          contentType: false,
          cache: false,
    ....
    J'ai 2 champs de texte un champ file. Je voudrais modifier mon code dans le but de vérifier la taille du fichier avant de l'ajouter dans formdata. Donc si la taille dépasse 2Mo, alors on n'ajoute pas le fichier.

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    $("[type='file']")
      .each(function(index, file) {
        if (file.files[0]) {
          fich=file.files[0];
          if (fich.size < 2097152) 
             formData.append("fichier_" +index, fich);
          else 
            console.log("le fichier "+ fich.name 
            + ', dépasse 2Mo, size :' 
            + fich.size);
        }
    });
    // Affichage du contenu de formData (paires clefs/valeurs)
    for (var pair of formData.entries()) {
      console.log("nom entrée :"+pair[0] + ', size fichier :' + pair[1].size + ', nom fichier :' + pair[1].name);
    }

  12. #12
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Il y a un problème avec cette syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(inputFile.files[0])
    {
     ...
    }
    else
    {
     console.log("Aucun fichier choisi");
    }
    Elle exécute d'abord les instructions contenues dans else {} et ensuite celles contenues dans le if {}.

    Par exemple pour ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $("[type='file']").each(function(index,inputFile) {
    	  if(inputFile.files[0]){
    		console.log('inputFile.size :',inputFile.files[0].size
    		," inputFile.name :",inputFile.files[0].name
    		," $(inputFile).get(0).files[0].size :",$(inputFile).get(0).files[0].size
    		," $(inputFile).get(0).files[0].name :",$(inputFile).get(0).files[0].name);
    	  }
    	  else {
    		console.log("Aucun fichier choisi");
    	  }
     });
    J'ai ceci dans la console:

    Aucun fichier choisi
    inputFile.size : 42912 inputFile.name : Ancienneté.pdf $(inputFile).get(0).files[0].size : 42912 $(inputFile).get(0).files[0].name : Ancienneté.pdf
    2e exemple, pour ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    $("[type='file']").each(function(index, file) {
        if (file.files[0]) {
         var fich=file.files[0];
          if (fich.size < 2097152) 
             formData.append("fichier_" +index, fich);
          else 
            console.log("le fichier "+ fich.name 
            + ', dépasse 2Mo, size :' 
            + fich.size);
        }
        else
        {
            console.log("Aucun fichier choisi");
        }
    });
    // Affichage du contenu de formData (paires clefs/valeurs)
    for (var pair of formData.entries()) {
      console.log("nom entrée :"+pair[0] + ', size fichier :' + pair[1].size + ', nom fichier :' + pair[1].name);
    }
    Aucun fichier choisi
    nom entrée :annee, size fichier :undefined, nom fichier :undefined
    nom entrée :mois, size fichier :undefined, nom fichier :undefined
    nom entrée :fichier_1, size fichier :42912, nom fichier :Ancienneté.pdf

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    il faut que le code soit à l'intérieur d'une fonction clic, sinon il s’exécute au chargement de la page et passe directement a la condition else vu que les inputs file sont vides au départ.
    Dans cet exemple j'ai mis un bouton ayant id="infos" <button id="infos">Get Infos</button>.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <button id="infos">Get Infos</button>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    $(document).ready(function() {
      var formData = new FormData(),fich;
      //clic sur le bouton #infos pour récupérer les valeurs stockés dans formData
      $("#infos").click(function() {
         formData.append('annee', 2019);
         formData.append('mois', 'février');
         $("[type='file']").each(function(index, file) {
          if (file.files[0]) {
            fich = file.files[0];
            if (fich.size < 2097152)
              formData.append("fichier_" + index, fich);
            else
              console.log("le fichier " + fich.name +
                ', dépasse 2Mo, size :' +
                fich.size);
          } else {
            console.log("Aucun fichier choisi");
          }
        });
        // Affichage du contenu de formData (paires clefs/valeurs)
        for (var pair of formData.entries()) {
          if (pair[1].name) {
            console.log('nom entrée :' + pair[0] + ', fichier nom :' + pair[1].name + ", fichier size :" + pair[1].size);
          } else {
            console.log("nom entrée :" + pair[0] +
              ", valeur :" + pair[1]);
          }
        }
      });
    });

  14. #14
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Merci beaucoup, ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Obtenir la taille d'un fichier distant.
    Par Cravis dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/09/2007, 15h31
  2. Obtenir la taille d'un fichier selectionné via input
    Par Tchupacabra dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 29/06/2007, 08h54
  3. obtenir la taille d'un fichier
    Par Wael Maaoui dans le forum Général Python
    Réponses: 1
    Dernier message: 26/04/2007, 16h01
  4. obtenir la taille d'un fichier à partir de son URL
    Par djanos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 23/02/2007, 00h22
  5. Comment obtenir la taille d'un fichier?
    Par Bruno29 dans le forum Flash
    Réponses: 3
    Dernier message: 16/01/2007, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo