我正在使用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);
}
}
}
});
我无法弄清楚如何检测用户拖动重新排序的时间。如果做不到这一点,我看不到首先开始上传队列时会触发的事件。
答案 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小部件中的文件的额外优势(这避免了对最终用户的一些混淆)。