2013-08-15 5 views
3

Я пытаюсь загрузить, чтобы очистить очередь загрузки, а также удалить загруженные файлы. Проблема в этом. Если я выгружаю 5 файлов (с uploadLimit из 5 наборов), они загружаются в первый раз. Но если я очистить очередь с помощью этого:Загрузить: Как удалить загруженные объекты из очереди

<a class="button" href="javascript:jQuery('#attachment').uploadify('cancel', '*');">Clear Upload Queue</a>

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

jQuery('#attachment').uploadify('settings', 'uploadLimit', 5) в onQueueClear, но он не сбрасывает uploadLimit. Как я могу сбросить uploadLimit после того, как очередь была очищена? Вот мой код:

jQuery('#attachment').uploadify({ 
    swf: '/javascript/uploadify/uploadify.swf', 
    uploader: '/javascript/uploadify/uploadify.php', 
    uploadFolder: 'temp', 
    uploadTime: UPLOAD_TIME, 
    uploadToken: UPLOAD_TOKEN, 
    cancelImage: '/javascript/uploadify/cancel.png', 
    fileTypeExts: '*.jpg; *.gif; *.png; *.jpeg; *.doc; *.docx; *.zip; *.pdf; *.xls; *.xlsx; *.JPG', 
    fileTypeDesc: 'Allowed Files', 
    auto: true, 
    multi: true, 
    removeCompleted: false, 
    simUploadLimit: 1, 
    fileSizeLimit: '3MB', 
    allowedFiles: '*.jpg; *.gif; *.png; *.jpeg; *.doc; *.docx; *.zip; *.pdf; *.xls; *.xlsx; *.JPG', 
    // allowedFiles: '*.cdt;*.con;*.doc;*.docx;*.dxd;*.gif;*.jpg;*.jpeg;*.key;*.lab;*.mov;*.mp4;*.m4v;*.pdf;*.png;*.pps;*.ppt;*.pptx;*.rst;*.txt;*.wmv;*.xls;*.xlsx;*.zip', 
    uploadLimit: 5, 
    width: 210, 
    height: 40, 
    buttonText: 'Click to Add Up to 5 Attachments', 
    buttonImage: '/images/content/mail/add-attachments.png', 
    onUploadStart: function (file) { 
     jQuery('.submit').attr('disabled', 'disabled'); 

     if (parseInt($.cookie('size')) > 0) { 
      $.cookie('size', parseInt($.cookie('size')) + file.size); 
     } else { 
      $.cookie('size', file.size); 
     } 

     if (parseInt($.cookie('size')) > 30000000) { 
      alert('You have exceeded the maximum queue size. Please delete one or more files from your upload. You can clear your queue by clicking the button below.'); 
      jQuery('#attachment').uploadify('cancel', '*'); 
     } 
    }, 
    onUploadSuccess: function (file, data, response) { 
     jQuery('.submit').removeAttr('disabled'); 

     try { 
      obj = jQuery.parseJSON(data); 
      if (obj.success) { 
       jQuery('#' + file.id).append('<input type="hidden" name="temp_image_path[]" value="' + obj.file.name + '" /><input type="hidden" name="original_name[]" value="' + obj.file.original_name + '" />'); 
      } 
     } catch (e) { 
      // do nothing 
     } 


    }, 
    onUploadError: function (file, errorCode, errorMsg, errorString) { 
     alert('The file ' + file.name + ' could not be uploaded: ' + errorString); 
    }, 
    onQueueComplete: function() { 
     jQuery('.submit').removeAttr('disabled'); 
    }, 
    onClearQueue: function (queueItemCount) { 
     //jQuery('.submit').attr('disabled', 'disabled'); 
     var file = (queueItemCount == 1) ? 'file has' : 'files have'; 
     alert(queueItemCount + ' ' + file + ' been removed from your upload queue. You have no files pending upload.'); 
     $.cookie('size', 0); 
     jQuery('#attachment').uploadify('settings', 'uploadLimit', 5); 
    }, 
    formData: { 
     'filetypes': '*.jpg; *.gif; *.png; *.jpeg; *.doc; *.docx; *.zip; *.pdf; *.xls; *.xlsx; *.JPG', 
      'folder': 'temp', 
      'time': UPLOAD_TIME, 
      'token': UPLOAD_TOKEN 
    } 
}); 
+0

Я даже попробовал 'unlink'ing файлы, и у меня все еще есть проблема. – sehummel

ответ

5

Я не смог найти вне коробки решения too.The cancel метода влияет еще только не загруженные файлы.

Я предлагаю вам иметь пользовательский обработчик для удаления загруженного файла (или всех файлов). Где-то рядом unlink звонок. И вы можете - не сбросить uploadLimit в 5, а увеличить uploadLimit по удаленным файлам.

Но объект uploadify все еще имеет информацию о загруженных файлах - это означает, что если пользователь попытается загрузить те же файлы, он получит предупреждающее сообщение о дублирующих файлах. Вы можете очистить эту коллекцию:

var files = $('#attachment').data('uploadify').queueData.files = []; 
for (var member in files) delete files[member]; 

Это может быть не правильно использовать его из вашего кода, но вы можете расширить плагин.

+0

Спасибо, пользователь1965761. Я попробую. – sehummel

+3

Я думаю, что в вашем коде есть опечатка. '.queryData.files' должен быть фактически' queueData.files'. –

+0

Спасибо, ребята, так много! 'queueData.files' работают – TheSmile

0

Как сказал Грин, метод отмены влияет только на не загруженные файлы.

Я нашел способ изменить значение, которое использует плагин, чтобы проверить, достиг ли очередь загрузки.

$('#attachment').data('uploadify').uploads.count 

можно редактировать это поле при снятии загруженного изображения

//on method that removes an image 
$('#attachment').data('uploadify').uploads.count--; 

С этого, плагин будет делать остальную работу, чтобы проверить размер очереди файлов. Кроме того, мы избегаем редактирования плагинов.