Как рассчитать общий размер всех загруженных файлов - PullRequest
1 голос
/ 31 октября 2019

Я использую следующий предыдущий вопрос SO, чтобы помочь мне с этим. Тем не менее, я получаю NaN вместо общего размера файла в журнале консоли.

Как рассчитать размер всех файлов, загруженных в 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);

1 Ответ

2 голосов
/ 31 октября 2019

ОБНОВЛЕНО

вам нужно использовать

 dropTotal+=dropFileSizes[file].size;

, если вы хотите увидеть рабочий пример, посмотрите на эту скрипку

dropFileSizes - это объект, а не массив , поэтому вам нужно использовать файловую переменную внутри $.each в качестве индекса и соответственно получить доступ к файлу с помощью dropFileSizes[file].size;

ИЛИ

если вы хотите, чтобы файл находился в том же месте, вам нужно поместить key в $.each, как показано ниже

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

скрипка

Однако, рассмотрите возможности неопределенных и нулевых значений

Попробуйте этот способ

$.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);, он будет использовать 0 вместо этого, если что-то еще, например null или undefined встретил

И чтобы получить значение dropTotal вне функции

, вам необходимо убедиться, что оператор console.log(dropTotal); выполняется послезвонок на toggleUploadButton()

...