最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - plupload - limit number of selected files - Stack Overflow

matteradmin3PV0评论

This is the part of code:

inprogress = false;

function getid(id) {
    return document.getElementById(id); 
}

var uploader = new plupload.Uploader({
    runtimes : 'gears,html5,flash,silverlight,browserplus',
    browse_button : 'link-browse',
    max_file_size : '100mb',
    url : 'site/upload/process.php?dir=<?php echo $uplid; ?>',
    flash_swf_url : 'site/upload/plupload.flash.swf',
    silverlight_xap_url : 'site/upload/plupload.silverlight.xap',
});
uploader.bind('Init', function(up, params) {
    //$('filelist').innerHTML = "<div>Current runtime: " + params.runtime + "</div>";
});
uploader.bind('FilesAdded', function(up, files) {
    if(uploader.files.length <= 0){
        var element = document.getElementById('standby');
        element.parentNode.removeChild(element);
    }
    if(up.files.length > 4 || uploader.files.length > 4)
    {
        alert('Only 5 files per upload !');

        return false;
    }
    for (var i in files) {
        getid('filelist').innerHTML += '<div class="item" id="' + files[i].id + '"><div class="name">' + files[i].name + '</div><div onclick="removeme(\''+files[i].id+'\')" id="remove-'+files[i].id+'" class="remove"></div><div class="size">[ ' + plupload.formatSize(files[i].size) + ' ]</div><div class="percent"></div></div>';
    }
});
uploader.bind('UploadFile', function(up, file) {
    getid('submit-form').innerHTML += '<input type="hidden" name="file-' + file.id + '" value="' + file.name + '" />';
});
uploader.bind('UploadProgress', function(up, file) {
    getid(file.id).getElementsByTagName('div')[3].innerHTML = '<span>' + file.percent + "%</span>";
});
uploader.bind('StateChanged', function(uploader) {
        if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
         window.location = "./dl/<?php echo $uplid; ?>"
        }
    });
getid('link-upload').onclick = function() {
    if(uploader.files.length < 1){
        alert('Please select files first.');
        return false;
    }
    inprogress = true;
    uploader.start();
    return false;
};
uploader.init();
function removeme(id){
    if(inprogress) return false;
    if(uploader.files.length == 1)
    getid('filelist').innerHTML += '<div id="standby"></div>';

    var element = document.getElementById(id);
    element.parentNode.removeChild(element);

    var toremove = '';

    for(var i in uploader.files){
        if(uploader.files[i].id === id){
            toremove = i;
        }
    }
    uploader.files.splice(toremove, 1);
}

I can limit of files being uploaded, And if I have 4 files selected, and I select 5 more -> it will show error

but if I at first select for example 14 files, they will be shown in "filelist".

How to limit that, or where to put "return false";

Thanks for any help :)

This is the part of code:

inprogress = false;

function getid(id) {
    return document.getElementById(id); 
}

var uploader = new plupload.Uploader({
    runtimes : 'gears,html5,flash,silverlight,browserplus',
    browse_button : 'link-browse',
    max_file_size : '100mb',
    url : 'site/upload/process.php?dir=<?php echo $uplid; ?>',
    flash_swf_url : 'site/upload/plupload.flash.swf',
    silverlight_xap_url : 'site/upload/plupload.silverlight.xap',
});
uploader.bind('Init', function(up, params) {
    //$('filelist').innerHTML = "<div>Current runtime: " + params.runtime + "</div>";
});
uploader.bind('FilesAdded', function(up, files) {
    if(uploader.files.length <= 0){
        var element = document.getElementById('standby');
        element.parentNode.removeChild(element);
    }
    if(up.files.length > 4 || uploader.files.length > 4)
    {
        alert('Only 5 files per upload !');

        return false;
    }
    for (var i in files) {
        getid('filelist').innerHTML += '<div class="item" id="' + files[i].id + '"><div class="name">' + files[i].name + '</div><div onclick="removeme(\''+files[i].id+'\')" id="remove-'+files[i].id+'" class="remove"></div><div class="size">[ ' + plupload.formatSize(files[i].size) + ' ]</div><div class="percent"></div></div>';
    }
});
uploader.bind('UploadFile', function(up, file) {
    getid('submit-form').innerHTML += '<input type="hidden" name="file-' + file.id + '" value="' + file.name + '" />';
});
uploader.bind('UploadProgress', function(up, file) {
    getid(file.id).getElementsByTagName('div')[3].innerHTML = '<span>' + file.percent + "%</span>";
});
uploader.bind('StateChanged', function(uploader) {
        if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
         window.location = "./dl/<?php echo $uplid; ?>"
        }
    });
getid('link-upload').onclick = function() {
    if(uploader.files.length < 1){
        alert('Please select files first.');
        return false;
    }
    inprogress = true;
    uploader.start();
    return false;
};
uploader.init();
function removeme(id){
    if(inprogress) return false;
    if(uploader.files.length == 1)
    getid('filelist').innerHTML += '<div id="standby"></div>';

    var element = document.getElementById(id);
    element.parentNode.removeChild(element);

    var toremove = '';

    for(var i in uploader.files){
        if(uploader.files[i].id === id){
            toremove = i;
        }
    }
    uploader.files.splice(toremove, 1);
}

I can limit of files being uploaded, And if I have 4 files selected, and I select 5 more -> it will show error

but if I at first select for example 14 files, they will be shown in "filelist".

How to limit that, or where to put "return false";

Thanks for any help :)

Share asked Sep 12, 2011 at 20:49 enlozenloz 5,8749 gold badges38 silver badges57 bronze badges 1
  • A side note 5 files equals a length of 5. Your current script will already alert and return when you try to upload a fifth file. – Rob W Commented Sep 12, 2011 at 21:12
Add a ment  | 

4 Answers 4

Reset to default 5

- Working for Pupload v2.0

$("#uploader").pluploadQueue({
    runtimes: 'html5,html4',
    url: 'upload.php',
    max_file_size: '2mb',
    unique_names: false,
    rename: true,
    prevent_duplicates: true,
    init : {
        FilesAdded: function(up, files) {
          var max_files = 12;
          plupload.each(files, function(file) {
            if (up.files.length > max_files) {
              alert('You are allowed to add only ' + max_files + ' files.');
              up.removeFile(file);
            }
          });
          if (up.files.length >= max_files) {
            $('#pickfiles').hide('slow');
          }
        },
        FilesRemoved: function(up, files) {
          if (up.files.length < max_files) {
            $('#pickfiles').fadeIn('slow');
          }
        }
      },
    resize : {width : 700, height : 700, quality : 90},
    filters: [
        {
            title: "Image files",
            extensions: "jpg,jpeg,gif,png"
        }
    ]
});

Expand if(up.files.length > 4 || uploader.files.length > 4) to if(up.files.length > 4 || uploader.files.length > 4 || files.length > 4).

Just use max_file_count: 4 option to limit amount files to upload

in reply to Rob W's answer, up and uploader is the same since it's the uploader instance, hence redundant; and it would be useful to also check (uploader.files.length + files.length) > 4 in order to check if a couple of ining files would exceed the 4 when taking the already "registered" files into account (e.g. somebody adds 2 files and then 3 files subsequently).

So in conclusion, I would remend

if(uploader.files.length > 4 || files.length > 4 || (uploader.files.length + files.length) > 4) {
Post a comment

comment list (0)

  1. No comments so far