2013-12-25 2 views
2

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

.on('progress', function (event, id, filename, uploadedBytes, totalBytes) 

, но как я могу получить общий прогресс?

+0

'uploadedBytes/totalBytes'? – Tomanow

+0

uploadedBytes/totalBytes вернет прогресс для каждого файла, а не общий прогресс (я одновременно загружаю несколько файлов – user1945821

+0

Какой плагин это? Где находится документация? – TheCarver

ответ

0

Посмотрев на документы (очень кратко), не похоже, что есть верный способ сделать это. Мое предложение состояло в том, чтобы подсчитать общее количество выбранных файлов и после того, как каждый файл будет успешно загружен, переместите индикатор выполнения X%.

<div class="tot_progress" style="width:500px;"> 
    <div class="bar" style="width:0; color:green;"></div> 
</div> 

.on('submitted', function(event, id, filename) { 
    filesToUpload++; 
}) 
.on('complete', function(event, id, fileName, responseJSON) {        
    uploadedFiles++; 
    prog_width = Math.floor(100/filesToUpload)*uploadedFiles; 
    $('.bar').css('width',prog_width+'%'); 
}) 

Например, предположим, что у нас было 4 файла для загрузки. После того, как первый файл завершит выполнение, индикатор выполнения покажет 25%, когда второй файл завершится, панель отобразит 50% ... Вы можете анимировать ширину, которая сделает ее более красивой.

+1

Я бы не рекомендовал делать это так, если вы не загружаете очень маленькие файлы, которые имеют примерно одинаковый размер. Истинный индикатор выполнения должен быть много м руд, чем это, поскольку он должен обновляться по мере отправки фактических байтов на сервер. Мой ответ показывает, как это сделать. –

+0

@RayNicholus Я могу понять, что существует более продвинутый/точный метод для прогресса в реальном времени, но нет ничего плохого в методе, который я предложил. Я только защищаюсь, потому что вы использовали слова «Я бы не рекомендовал делать это так», как будто с ним что-то не так. Было бы немного лучше, если бы вы написали: «Есть лучший способ добиться этого». Мне нравится мой метод показа процентного завершения только тогда, когда файл действительно завершается. – TheCarver

+0

Достаточно честный. Я просто предположил, что OP хочет отразить поведение встроенного индикатора выполнения каждого файла, который предоставляет Fine Uploader. –

0

Это не очень сложно сделать, и это намного лучше, чем просто увеличивать индикатор выполнения после завершения каждого файла. Вы должны использовать progress event, по большей части. На самом деле, я даже подробно описал how you can create your own aggregate progress bar in a blog post I wrote.

Например (из блога):

var perFileProgress = {}; 

$(element).fineUploader({ 
    ... 
    callbacks: { 
     onProgress: function(id, name, sent, total) { 
      perFileProgress[id] = [sent, total]; 
      updateTotalProgress(); 
     }, 

     onCancel: function(id) { 
      if (qq.supportedFeatures.progressBar) { 
       delete perFileProgress[id]; 
       updateTotalProgress(); 
      } 
     }, 

     onComplete: function(id, name, response) { 
      if (!response.success) { 
       delete perFileProgress[id]; 
       updateTotalProgress(); 
      } 
     } 
     ... 
    } 
}); 

function updateTotalProgress() { 
    var $container = $("#totalProgress"), 
     $bar = $container.find(".progress-bar"), 
     totalSent = 0, 
     totalSize = 0, 
     percentComplete = 0; 

    $.each(perFileProgress, function(fileId, progressData) { 
     totalSent += progressData[0]; 
     totalSize += progressData[1]; 
    }); 
    percentComplete = Math.round((totalSent/totalSize) * 100); 

    if (totalSent !== totalSize) { 
     $bar.css({ 
      width: percentComplete + "%" 
     }); 

     $container.removeClass("hide"); 
    } 
    else { 
     $container.addClass("hide"); 
    } 
} 

Примечание: Мой код выше предполагает, что вы используете загрузчик, но это, конечно, не требуется, и вы можете удалить зависимость от начальной загрузки довольно легко при желании ,

3

В качестве обновления к этому вопросу есть замечательный простой и эффективный способ сделать это сейчас. Документация на docs.fineuploader.com, а также можно получить обновления as a progress bar. Я также считаю, что этот текст приятно сочетать с Bootstrap's Progress Bar/Label functionality.

$(element).fineUploader({ 
... 
}) 
.on("totalProgress", function(event, totalUploadedBytes, totalBytes) { 
    var progressPercent = (totalUploadedBytes/totalBytes).toFixed(2); 
    if(isNaN(progressPercent)) { 
    $('#progress-text').text(''); 
    } else { 
    var progress = (progressPercent * 100).toFixed() + '%'; 

    $('#progress-text').text(progress); 
    } 
}); 

А вот соответствующий код для переднего конца привязывания для начальной загрузки:

<div id="progress-bar-container" class="qq-total-progress-bar-container-selector progress"> 
    <div id="progress-bar" class="qq-total-progress-bar-selector qq-progress-bar qq-total-progress-bar progress-bar progress-bar-info progress-bar-striped active" role="progressbar"> 
    <span id="progress-text"></span> 
    </div> 
</div> 

Если вы хотите сохранить интеграцию Bootstrap ARIA/чтения с экрана, вы можете добавить крючки для этого, а также ,

Смежные вопросы