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

How to calculate the total sizes for all files uploaded

我正在使用以下之前的 SO 问题来指导我解决这个问题。但是,我在控制台日志中得到的是 NaN 而不是总文件大小。

有没有人看出我做错了什么?

var dropFileSizes = acceptedFiles, dropTotal=0;
$.each(dropFileSizes, function(file){
    dropTotal+=file.size;
});
console.log(dropTotal);

完整代码:

function toggleUploadButton() {
    acceptedFiles = myDropzone.getAcceptedFiles();
    queuedFiles = myDropzone.getQueuedFiles();
    rejectedFiles = myDropzone.getRejectedFiles();
    allAcceptFiles = acceptedFiles.values();

    var dropFileSizes = acceptedFiles, dropTotal=0;
    $.each(dropFileSizes, function(file){
        dropTotal+=file.size;
    });
    console.log(dropTotal);
}

尝试获取 toggleUploadButton 函数之外的总数:

var dropTotal = 0;
var dropFileSizes = acceptedFiles;
function toggleUploadButton() {
    acceptedFiles = myDropzone.getAcceptedFiles();
    allAcceptFiles = acceptedFiles.values();
    $.each(dropFileSizes, function(file){
        dropTotal+= (dropFileSizes[file].size || 0);
    });
}
console.log(dropTotal);

已更新

你需要使用

 dropTotal+=dropFileSizes[file].size;

如果您想查看工作示例,请查看 this fiddle

dropFileSizes 是一个对象,不是数组 所以你需要使用 $.each 中的文件变量作为索引并相应地访问文件通过 dropFileSizes[file].size;

如果你想把文件放在同一个地方,你需要把 key 放到 $.each 中,如下所示

 $.each(dropFileSizes, function(key, file){
        dropTotal+=file.size;       
    });

fiddle

但是,考虑未定义值和空值的可能性

试试这个方法

$.each(dropFileSizes, function(file){
    dropTotal+= (dropFileSizes[file].size || 0);
    // or  dropTotal+=(file.size || ) if you are using function(key, file){};  
});

在您的代码中,如果 dropFileSizes[file].size 包含除数字以外的其他内容,数学运算将失败,这将导致 NaN 并且您的 dropTotal 将变为 NaN;

如果您使用 dropTotal+= (dropFileSizes[file].size || 0);,如果遇到诸如 nullundefined 之类的其他内容,它将使用 0 代替

并在函数外获取 dropTotal 的值

您需要确保在调用 toggleUploadButton()

之后执行语句 console.log(dropTotal);