如何计算dropzone上传的所有文件大小?

时间:2016-07-09 16:18:09

标签: jquery dropzone.js

我想计算在dropzone上传的所有选定文件总大小。

例如:如果我选择5个大小为2mb的文件 它应该返回10mb的总大小

我想限制所有文件的总大小是否大于限制。

任何人都可以帮助我,我真的被困了。

3 个答案:

答案 0 :(得分:3)

您可能需要此功能的完整版本。

var myDropzone = new Dropzone("#my-dropzone");
var totalSizeLimit = 300*1024*1024; //300MB
myDropzone.on("uploadprogress", function(file, progress, bytesSent) {
    var alreadyUploadedTotalSize = getTotalPreviousUploadedFilesSize();
    if((alreadyUploadedTotalSize + bytesSent) > totalSizeLimit){
      this.disable();
    }
});
function getTotalPreviousUploadedFilesSize(){
   var totalSize = 0;
   myDropzone.getFilesWithStatus(Dropzone.SUCCESS).forEach(function(file){
      totalSize = totalSize + file.size;
   });
   return totalSize;
}

答案 1 :(得分:2)

首先成功上传文件,然后迭代它们并获得大小。 如果总数超过某个限制,您可以在dropzone上调用disable()。

var files = dropzoneElement.getFilesWithStatus(Dropzone.SUCCESS), total=0;
$.each(files, function(file){
   total+=file.size;
});
alert(total);

答案 2 :(得分:1)

如果设置uploadMultiple: true,则无论文件数量多少,下面的方法只会在文件丢失时运行一次。使用sendingmultiple是一个小优化,因为它每个队列只运行一次,而不是每个文件都运行一次。

init: function() {

  this.on("sendingmultiple", function(file) {

    var uploaded_size = 0;

    $.each(file, function(k, v) {
      uploaded_size += v.size;
    });

    if (uploaded_size > 10240000) {

      alert('Total size of all files: ' + uploaded_size);

      this.disable(); // disable current upload
      this.enable(); // enable drop zone again
    }

  });

}