So begrenzen Sie die maximale Anzahl von Dateien, die bei Verwendung mehrerer Dateieingaben ausgewählt wurden


Antworten:


68

Sie können eine clientseitige jQuery-Validierung ausführen, um Folgendes zu überprüfen:

$(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/

Denken Sie jedoch daran, dies auch auf der Serverseite zu überprüfen, da die clientseitige Validierung ganz einfach umgangen werden kann.


11
Ich verstehe nicht wirklich, warum dieser Code als richtige Antwort markiert ist. Es überprüft zwar die Anzahl der hochgeladenen Dateien, deaktiviert jedoch nicht das Senden von Formularen. jsfiddle-Code hat kein Formular-Tag mit definiertem Aktionsattribut und es scheint, als würde es gut funktionieren. Wenn wir es jedoch durch Hinzufügen eines Formular-Tags erweitern, wird das Formular trotzdem gesendet, sobald eine Warnung angezeigt wird.
David

3
@ David Meistens, weil die Leute überall Sachen kopieren und einfügen. Das und es ist 6 Jahre her.
Félix Gagnon-Grenier

14

Bei Änderung der Eingabespur, wie viele Dateien ausgewählt sind:

$("#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" >


8

Dies sollte funktionieren und Ihr Formular vor dem Senden schützen, wenn die Anzahl der Dateien größer als max_file_number ist.

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

Die einzig einfache Lösung dieser ganzen Frage. Genial!
Efferalgan

4

Eine weitere mögliche Lösung mit JS

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

on chrome onselect löst die Methode nicht aus. onchange wird zwar ausgelöst, verhindert jedoch nicht die Standardeinstellung.
Johann Combrink

3

Sie sollten auch in Betracht ziehen, Bibliotheken zu verwenden, um dies zu tun: Sie ermöglichen Einschränkungen und vieles mehr:

Sie sind auch unter https://cdnjs.com/ verfügbar.


-3

Verwenden Sie <input type=file>stattdessen zwei Elemente ohne das multipleAttribut.


1
Dies wird nur ein Bild erlauben, er will 2 Bilder
Diego

4
Nein, dies ermöglicht zwei separate Dateilistenobjekte und wurde konsequent als DIE Methode zum Hochladen mehrerer Dateien und zum Begrenzen ihrer Anzahl verwendet - vor 15 Jahren
me_

Wenn die Anforderung wirklich nur "zwei verschiedene einzelne Eingänge haben" ist, dann ist dies tatsächlich die beste Antwort @Diego. Die Frage ist leider so unklar, dass wir sie nicht wirklich sagen können.
Félix Gagnon-Grenier

@me_ Ich bin wirklich neugierig, was die Lösung jetzt ist. Hoffentlich sprechen Sie dort nicht über diesen jQuery-Cluster. Das war vor sieben Jahren total radikal.
Félix Gagnon-Grenier

@ Félix Gagnon-Grenier das multiple Attribut existierte erst in HTML 5 ... unabhängig von der Verwendung einer Bibliothek oder einfach nur Javascript muss die Anzahl der Dateien nach Auswahl der Dateien überprüft werden. Ich würde sagen, die Lösung besteht darin, dem Benutzer nicht mehr als eine bestimmte Anzahl von Dateien mitzuteilen und dann Dateityp und -nummer zu überprüfen, wenn das Popup geschlossen wird. Lehnen Sie das Dateiobjekt ab, wenn es die angegebene Anzahl überschreitet, und starten Sie erneut. Aber nein, dies ist nicht die beste Lösung - Interms von UI allein ist viel langsamer ... wir haben jetzt das Multiple-Attribut, verwenden Sie es.
me_

-5

Wenn Sie PHP wollen, können Sie das Array zählen und einfach eine if-Anweisung wie machen

if((int)count($_FILES['i_dont_know_whats_coming_next'] > 2)
      echo "error message";
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.