【问题标题】:How to calculate the total sizes for all files uploaded如何计算所有上传文件的总大小
【发布时间】:2019-10-31 18:25:09
【问题描述】:

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

How to calculate all files size uploaded in dropzone?

有人看到我做错了吗?

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

【问题讨论】:

    标签: javascript jquery file dropzone.js


    【解决方案1】:

    更新

    你需要使用

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

    【讨论】:

    • 现在才出现0。文件大小仍未输出或总计。
    • 你能不能 console.log acceptedFiles 看看它有没有大小的文件
    • 是的,确实如此:[File] 0: File accepted: true dataURL: "data:image/png;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/" height: 300 lastModified: 1516369295286 lastModifiedDate: Fri Jan 19 2018 08:41:35 GMT-0500 (Eastern Standard Time) {} name: "AppExchange-Salesforce.png" previewElement: div.dz-preview.dz-image-preview previewTemplate: div.dz-preview.dz-image-preview size: 40480
    • dropTotal 变量仅输出最后一个文件大小。它在我的文件和你的小提琴中进行。
    • 不,仔细检查,尝试添加文件,我验证了警报中的输出是所有文件的总大小
    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2019-11-14
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2014-05-16
    相关资源
    最近更新 更多