2013-05-21 1 views
1

Я использую виджет пользовательского интерфейса JQuery Plupload в качестве основы для моего загрузчика. Виджет позволяет пользователю перетаскивать переупорядоченные файлы.Как мне численно переименовывать файлы в Plupload до их загрузки?

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

Прежде чем начать загрузку, мне нужно переименовать все файлы для загрузки численно, чтобы первый загружаемый файл (тот, который находится в верхней части списка виджетов jQuery), равен «1», второй «2» ' и так далее.

Например, учитывая следующий список:

bob.jpg 
ann.jpg 
doug.jpg 
chris.jpg 

Я хочу, чтобы они переименованы:

1.jpg 
2.jpg 
3.jpg 
4.jpg 

Это работает, когда пользователь добавляет новые файлы или удаляет существующие файлы. Не работает , когда пользователь перетаскивает файлы. Вот моя конкретизация код пользователя:

$('#' + div_id).plupload({ 
    runtimes: 'html5, flash, silverlight', 
    url: 'upload', 
    unique_names: false, 
    rename: true, 
    sortable: true, 
    buttons: { browse: true, start: false, stop: false },  

    // Flash settings 
    flash_swf_url: 'js/plupload/plupload.flash.swf', 

    // Silverlight settings 
    silverlight_xap_url : 'js/plupload/plupload.silverlight.xap', 

init: { 
    QueueChanged: function(up) { 
    for (var i = 0; i < up.files.length; i++) { 
     up.files[i].name = (i+1); 
    } 
    } 
} 
}); 

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

+1

Вы пытались использовать событие BeforeUpload, ища индекс файла в очереди и переименовывая его? (должен признаться, что это просто случайные мысли) – jbl

+0

Это возможность, но я на самом деле обнаружил более легкое обходное решение. Однако ваше решение может помочь другим. – Garry

ответ

2

В случае, если кто-то приходит на эту проблему:

Вместо того, чтобы использовать QueueChanged() событие я просто использовал JQuery, чтобы получить каждый экземпляр Plupload и в .each() цикла JQuery, я использовал этот код:

var regex = /(?:\.([^.]+))?$/; 
for (var i = 0; i < uploader.files.length; i++) { 
    var ext = regex.exec(uploader.files[i].name)[1]; 
    uploader.files[i].name = (ext == undefined) ? (i+1) : (i+1) + '.' + ext; 
} 
uploader.start(); 

Это Я не переименовываю до момента загрузки. Он также имеет дополнительное преимущество не переименовывать файлы в виджетах пользовательского интерфейса перед загрузкой (что позволяет избежать некоторой путаницы с конечным пользователем).

+0

Нашли это очень интересно! Благодарю вас, @Garry – arraystack