web-dev-qa-db-fra.com

Comment limiter le nombre maximum de fichiers choisis lors de l'utilisation de plusieurs entrées de fichier

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

Comment définit-on une limite au nombre de fichiers pouvant être choisis, par exemple deux?

53
rjmcb

Vous pouvez exécuter une validation côté client 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 du côté serveur car la validation côté client peut être contournée assez facilement.

50
Curt

Lors du changement de 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" >
7
Kristian Antov

Cela devrait fonctionner et protéger votre formulaire contre l'envoi si le nombre de fichiers est supérieur à max_file_number.

$(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);
    }
  });
});
4
David

Vous devriez également envisager d'utiliser des bibliothèques pour le faire: elles permettent de limiter et bien plus encore:

Ils sont également disponibles sur https://cdnjs.com/