如何在Plupload上传文件之前以数字方式重命名文件?

时间:2013-05-21 22:25:39

标签: javascript jquery file-upload plupload

我正在使用Plupload jQuery UI小部件作为我的上传器的基础。该小部件允许用户拖动重新排序添加的文件。

上传是在提交表单时自动开始的,而不是由用户手动开始。在上传过程中,UI被阻止,因此用户无法再添加文件。

在上传开始之前,我需要重命名所有文件以数字方式上传,以便第一个要上传的文件(jQuery UI小部件列表顶部的文件)为'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 个答案:

答案 0 :(得分:2)

如果有其他人遇到此问题:

我没有使用QueueChanged()事件,只是使用jQuery来获取每个Plupload实例,而在jQuery的.each()循环中我使用了这段代码:

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();

这样我才能在上传前立即重命名。它还具有在上传之前不重命名UI小部件中的文件的额外优势(这避免了对最终用户的一些混淆)。