1

我正在使用 Plupload jQuery 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);
     }
   }
 }
});

我不知道如何检测用户何时拖动重新排序。如果做不到这一点,我看不到在队列上传首次开始时触发的事件。

4

1 回答 1

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 小部件中的文件(这避免了最终用户的一些混淆)。

于 2013-05-22T12:49:20.283 回答