【问题标题】:How to calculate all files size uploaded in dropzone?如何计算在 dropzone 中上传的所有文件大小?
【发布时间】:2016-11-12 00:49:53
【问题描述】:

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

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

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

谁能帮帮我,我真的被困住了。

【问题讨论】:

标签: jquery dropzone.js


【解决方案1】:

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

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;
}

【讨论】:

    【解决方案2】:

    首先获取文件上传成功,然后遍历它们并获取大小。 然后,如果总数超过一定限制,您可以在 dropzone 上调用 disable()。

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

    【讨论】:

      【解决方案3】:

      如果你设置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
          }
      
        });
      
      }
      

      【讨论】:

      • 我很好奇为什么没有人支持这个。这个优化更好!
      猜你喜欢
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      相关资源
      最近更新 更多