110 votes

Comment limiter le nombre maximum de fichiers choisis lors de l'utilisation de l'entrée de fichiers multiples ?

Lorsque vous utilisez <input type="file" multiple> il est possible pour l'utilisateur de choisir plusieurs fichiers.

Comment peut-on fixer une limite au nombre de fichiers pouvant être choisis, par exemple deux ?

1 votes

Cela pourrait être utile : stackoverflow.com/questions/9813556/

0 votes

83voto

Curt Points 42871

Vous pourriez exécuter une validation côté client de jQuery pour vérifier :

$(function(){
    $("input[type='submit']").click(function(){
        var $fileUpload = $("input[type='file']");
        if (parseInt($fileUpload.get(0).files.length)>2){
         alert("You can only upload a maximum of 2 files");
        }
    });    
});​

http://jsfiddle.net/Curt/u4NuH/

Mais n'oubliez pas de vérifier également le côté serveur, car la validation côté client peut être contournée assez facilement.

24 votes

Je ne comprends pas vraiment pourquoi ce code est marqué comme réponse correcte. Il vérifie effectivement le nombre de fichiers téléchargés mais ne désactive pas l'envoi du formulaire. Le code de jsfiddle n'a pas de balise form avec un attribut action défini et il pourrait sembler qu'il fonctionne bien, mais si nous l'étendons en ajoutant une balise form, il soumettra le formulaire de toute façon juste après l'apparition de l'alerte.

5 votes

David C'est surtout parce que les gens copient et collent des trucs partout. Ça et le fait que ça fait 6 ans.

27voto

Kristian Antov Points 179

Lors du changement de la piste d'entrée, combien de fichiers sont sélectionnés :

$("#image").on("change", function() {
    if ($("#image")[0].files.length > 2) {
        alert("You can select only 2 images");
    } else {
        $("#imageUploadForm").submit();
    }
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<strong>On change of the input track how many files are selected:</strong>
<input name="image[]" id="image" type="file"  multiple="multiple" accept="image/jpg, image/jpeg" >

12voto

David Points 356

Cela devrait fonctionner et empêcher votre formulaire d'être soumis si le nombre de fichiers est supérieur au nombre maximum de fichiers.

$(function() {

  var // Define maximum number of files.
      max_file_number = 3,
      // Define your form id or class or just tag.
      $form = $('form'), 
      // Define your upload field class or id or tag.
      $file_upload = $('#image_upload', $form), 
      // Define your submit class or id or tag.
      $button = $('.submit', $form); 

  // Disable submit button on page ready.
  $button.prop('disabled', 'disabled');

  $file_upload.on('change', function () {
    var number_of_images = $(this)[0].files.length;
    if (number_of_images > max_file_number) {
      alert(`You can upload maximum ${max_file_number} files.`);
      $(this).val('');
      $button.prop('disabled', 'disabled');
    } else {
      $button.prop('disabled', false);
    }
  });
});

0 votes

La seule solution simple qui fonctionne, de toute cette question. Génial !

10voto

Enrique Points 181

Une autre solution possible avec JS

function onSelect(e) {
    if (e.files.length > 5) {
        alert("Only 5 files accepted.");
        e.preventDefault();
    }
}

0 votes

Sous chrome, onselect ne déclenche pas la méthode. onchange la déclenche mais n'empêche pas le défaut.

2voto

Firzok Nadeem Points 299

En javascript, vous pouvez faire quelque chose comme ceci

<input
  ref="fileInput"
  multiple
  type="file"
  style="display: none"
  @change="trySubmitFile"
>

et la fonction peut être quelque chose comme ça.

trySubmitFile(e) {
  if (this.disabled) return;
  const files = e.target.files || e.dataTransfer.files;
  if (files.length > 5) {
    alert('You are only allowed to upload a maximum of 2 files at a time');
  }
  if (!files.length) return;
  for (let i = 0; i < Math.min(files.length, 2); i++) {
    this.fileCallback(files[i]);
  }
}

Je suis également à la recherche d'une solution permettant de limiter cette opération au moment de la sélection des fichiers, mais jusqu'à présent, je n'ai rien trouvé de tel.

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