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 ?
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 ?
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.
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.
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" >
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);
}
});
});
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 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.
1 votes
Cela pourrait être utile : stackoverflow.com/questions/9813556/
0 votes
Duplicata possible de Compter et limiter le nombre de fichiers téléchargés (saisie de fichiers HTML)