Как сбросить очередь в SWFUpload? - PullRequest
1 голос
/ 30 мая 2011

Я скачал SWFUpload в надежде создать функциональность для загрузки больших файлов через мой сайт.

Я нашел это руководство: http://webdeveloperplus.com/jquery/multiple-file-upload-with-progress-bar-using-jquery/, с которого я думал, что смогу начать. Разница в том, что я хочу разрешить загружать только одно изображение за раз. Но я не знаю, как восстановить SWFUpload после того, как я загрузил файл? Я хочу, чтобы очередь сбрасывалась, а индикатор выполнения исчезал.

Отладка говорит: SWF DEBUG: Event: uploadError : Upload limit reached. No more files can be uploaded.

Вот мой код для SWFUpload:

$(function()
{
    $('#swfupload-control').swfupload({
          upload_url                : "upload-file.php"
        , file_post_name            : 'uploadfile'
        , file_size_limit           : "102400" // 100 MB
        , file_types                : "*.jpg;*.png;*.gif"
        , file_types_description    : "Image files"
        , file_upload_limit         : 1
        , flash_url                 : "js/swfupload/swfupload.swf"
        , button_image_url          : 'js/swfupload/wdp_buttons_upload_114x29.png'
        , button_width              : 114
        , button_height             : 29
        , button_placeholder        : $('#button')[0]
        , debug                     : true
    })
    .bind('fileQueued', function(event, file)
    {
        var listitem='<li id="'+file.id+'">'+
            '<span class="progresstext"><span class="progressvalue"></span> '+file.name+'</span>'+
            '<div class="progressbar"><div class="progress"></div></div>'+
            '</li>';
        $('#log').append(listitem);
        // start the upload since it's queued
        $(this).swfupload('startUpload');
    })
    .bind('fileQueueError', function(event, file, errorCode, message)
    {
        alert('Size of the file '+file.name+' is greater than limit');
    })
    .bind('uploadStart', function(event, file)
    {
        $('#log li#'+file.id).find('span.progressvalue').text('0%');
    })
    .bind('uploadProgress', function(event, file, bytesLoaded)
    {
        //Show Progress
        var percentage = Math.round((bytesLoaded/file.size)*100);
        $('#log li#'+file.id).find('div.progress').css('width', percentage+'%');
        $('#log li#'+file.id).find('span.progressvalue').text(percentage+'%');
    })
    .bind('uploadSuccess', function(event, file, serverData)
    {
        var item = $('#log li#'+file.id);
        item.find('div.progress').css('width', '100%');
        item.find('span.progressvalue').text('100%');
    })
    .bind('uploadComplete', function(event, file)
    {
        // upload has completed, try the next one in the queue
        $(this).swfupload('startUpload');
    })

});

Ответы [ 2 ]

3 голосов
/ 30 мая 2011

Если вы имеете дело с очередями загрузки, гораздо проще использовать плагин swfupload.queue

Затем вы можете связать событие 'queueComplete' с вашим объектом swfupload, который будетбыть запущенным, как только вся очередь будет обработана (именно здесь вы захотите скрыть свой индикатор выполнения и сбросить очередь).Чтобы сбросить очередь, этот плагин также добавляет функцию cancelQueue () (обратите внимание на то, где вы ее вызываете, поскольку она отменит любую текущую загрузку).

Если вы хотите отменить ее вручную/ не используйте этот плагин, вы должны отменять файлы один за другим, пока объект stats () не покажет, что он пуст

// request your stat objects, it contains amongst others the number of files in the queue
var stats = my_upload.getStats();
// while the queue is not empty ...
while (stats.files_queued > 0) {
  // .. cancel the first in the queue (null: take the first found, false: don't trigger an error event)
  my_upload.cancelUpload(null, false);
  // it is important to reload the stats everytime and not just do a for (i = 0; i < stats.files_queued ...
  stats = my_upload.getStats();
}
1 голос
/ 19 июня 2013

Я думаю, что вы имеете в виду «Как сбросить статистическую информацию после загрузки?».

Через некоторое время, например, если вы установили file_upload_limit на 1, вы загрузили файл, но удалили его после этого, вам необходимо сбросить статистическую информацию, иначе вы не сможете продолжить загрузку какого-либо файла.

Теперь вы можете написать код, как показано ниже:

  var stats = swfUploadObj.getStats();
  stats.successful_uploads = stats.successful_uploads - 1;
  swfUploadObj.setStats(stats);
...