使用多个文件输入时如何限制选择的最大文件数


Answers:


68

您可以运行一些jQuery客户端验证来检查:

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

但是请记住也要在服务器端进行检查,因为可以很容易地绕过客户端验证。


11
我不太明白为什么将此代码标记为正确答案。它确实会检查上传文件的数量,但是不会禁用表单提交。jsfiddle代码没有带有定义的动作属性的表单标签,并且看起来似乎不错,但是,如果我们通过添加表单标签对其进行扩展,它将在警报出现后立即提交表单。
David

3
@David主要是因为人们到处复制和粘贴内容。那已经6年了。
费利克斯Gagnon的-格雷尼尔

14

在更改输入轨道时,选择了多少个文件:

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

如果文件数大于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);
    }
  });
});

整个问题的唯一简单解决方案。太棒了!
Efferalgan

4

JS的另一种可能的解决方案

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

在chrome onselect上不会触发该方法。onchange确实会触发,但不会阻止默认操作。
Johann Combrink '20

3

您还应该考虑使用库来做到这一点:它们允许限制,还有更多:

它们也可以从https://cdnjs.com/获得。


-3

请改用两个<input type=file>没有multiple属性的元素。


1
这将只允许一个形象,他希望2个图像
圣地亚哥

4
不,这允许两个单独的文件列表对象,并且一直用作上传多个文件并限制其数量的THE方法--15年前
me_

如果要求实际上只是“具有两个不同的单个输入”,那么这实际上是@Diego的最佳答案。可悲的是,这个问题如此不清楚,我们不能真正说出来。
费利克斯Gagnon的-格雷尼尔

@me_我真的很好奇现在的解决方案。希望您不在那儿谈论那个jQuery集群。就像七年前一样。
费利克斯Gagnon的-格雷尼尔

@FélixGagnon-Grenier在html 5之前不存在multiple属性...无论使用库还是仅使用纯JavaScript,选择文件后都必须检查文件数。我想说的解决方案是告诉用户不超过给定数量的文件,然后在弹出窗口关闭时检查文件类型和数量...如果文件对象超过给定数量,则拒绝文件对象,然后重新开始。但是不,这不是最好的解决方案-仅ui的内部处理要慢得多...我们现在有multi属性,请使用它。
me_ 18/09/18

-5

如果您想要php,则可以计算数组,并仅执行if语句,例如

if((int)count($_FILES['i_dont_know_whats_coming_next'] > 2)
      echo "error message";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.