dropzone.js - how to do something after ALL files are uploaded

后端 未结 9 1164
花落未央
花落未央 2020-12-13 05:48

I am using dropzone.js for my drag-drop file upload solution. I am stuck at something where I need to call a function after all the files are uploaded. In this case

相关标签:
9条回答
  • 2020-12-13 06:39
    this.on("totaluploadprogress", function(totalBytes, totalBytesSent){
    
    
                        if(totalBytes == 100) {
    
                            //all done! call func here
                        }
                    });
    
    0 讨论(0)
  • 2020-12-13 06:41

    I up-voted you as your method is simple. I did make only a couple of slight amends as sometimes the event fires even though there are no bytes to send - On my machine it did it when I clicked the remove button on a file.

    myDropzone.on("totaluploadprogress", function(totalPercentage, totalBytesToBeSent, totalBytesSent ){
                if(totalPercentage >= 100 && totalBytesSent) {
                    // All done! Call func here
                }
            });
    
    0 讨论(0)
  • 2020-12-13 06:44

    There is probably a way (or three) to do this... however, I see one issue with your goal: how do you know when all the files have been uploaded? To rephrase in a way that makes more sense... how do you know what "all" means? According to the documentation, init gets called at the initialization of the Dropzone itself, and then you set up the complete event handler to do something when each file that's uploaded is complete. But, what mechanism is the user given to allow the program to know when he's dropped all the files he's intended to drop? If you are assuming that he/she will do a batch drop (i.e., drop onto the Dropzone 2-whatever number of files, at once, in one drop action), then the following code could/possibly should work:

    Dropzone.options.filedrop = {
        maxFilesize: 4096,
        init: function () {
            var totalFiles = 0,
                completeFiles = 0;
            this.on("addedfile", function (file) {
                totalFiles += 1;
            });
            this.on("removed file", function (file) {
                totalFiles -= 1;
            });
            this.on("complete", function (file) {
                completeFiles += 1;
                if (completeFiles === totalFiles) {
                    doSomething();
                }
            });
        }
    };
    

    Basically, you watch any time someone adds/removes files from the Dropzone, and keep a count in closure variables. Then, when each file download is complete, you increment the completeFiles progress counter var, and see if it now equals the totalCount you'd been watching and updating as the user placed things in the Dropzone. (Note: never used the plug-in/JS lib., so this is best guess as to what you could do to get what you want.)

    0 讨论(0)
提交回复
热议问题