Как мне численно переименовать файлы в Plupload перед их загрузкой?

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

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

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

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


person Garry Pettet    schedule 21.05.2013    source источник
comment
Вы пытались использовать событие BeforeUpload, искать индекс файла в очереди и переименовывать его? (должен признаться, что это просто случайные мысли)   -  person jbl    schedule 22.05.2013
comment
Это возможно, но я на самом деле нашел более простой обходной путь. Однако ваше решение может помочь другим.   -  person Garry Pettet    schedule 22.05.2013


Ответы (1)


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

Вместо использования события 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();

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

person Garry Pettet    schedule 22.05.2013
comment
Нашла много интересного! Спасибо @Гарри - person arraystack; 07.08.2016