2013-05-21 47 views
1

我正在使用Plupload jQuery UI小部件作爲我的上傳者的基礎。該小部件允許用戶拖動重新排序添加的文件。如何在數字上重命名Plupload中的文件,然後才能上傳?

上傳在提交表單時自動開始,而不是由用戶手動完成。在上傳過程中,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

您是否嘗試過使用BeforeUpload事件,搜索隊列中文件的索引並重命名它? (必須承認,這只是隨機想法) – jbl

+0

這是一種可能性,但我實際上發現了一個更簡單的解決方法。你的解決方案雖然可以幫助其他人 – Garry

回答

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小部件中的文件的額外優勢(這避免了最終用戶的混淆)。

+0

發現它很有趣!謝謝@加里 – arraystack