我沒有看到關於限制上傳的文件數量,到任意數量的plupload API文檔的選項,甚至1Plupload - 限制到只有一個文件
文件失敗?或功能失敗?如果它不存在,我會努力做到這一點,如果有人需要它..
我沒有看到關於限制上傳的文件數量,到任意數量的plupload API文檔的選項,甚至1Plupload - 限制到只有一個文件
文件失敗?或功能失敗?如果它不存在,我會努力做到這一點,如果有人需要它..
這是一個功能失敗。我圍繞jQuery API做了一個包裝,這就是我爲了讓它爲我工作的原因。我的代碼執行一些其他的業務邏輯,但它應該給你足夠的設置開始。
基本上,綁定到FilesAdded
事件並在上傳對象(如果文件太多)上調用removeFile
。我想我添加了50ms的超時時間,因爲它給我的文件還不存在的問題。
uploader.bind('FilesAdded', function (up, files) {
var i = up.files.length,
maxCountError = false;
plupload.each(files, function (file) {
if(uploader.settings.max_file_count && i >= uploader.settings.max_file_count){
maxCountError = true;
setTimeout(function(){ up.removeFile(file); }, 50);
}else{
// Code to add pending file details, if you want
}
i++;
});
if(maxCountError){
// Too many files uploaded, do something
}
});
max_file_count
是我添加到pluploader實例,當我創建它的東西。
編輯:其實我不得不做這兩種不同的方式。以上只會允許一個人上傳一定數量的文件(否則會產生錯誤)。
這段代碼的工作原理類似的方式 - 但會刪除現有文件和只能上傳最新:
uploader.bind('FilesAdded', function (up, files) {
var fileCount = up.files.length,
i = 0,
ids = $.map(up.files, function (item) { return item.id; });
for (i = 0; i < fileCount; i++) {
uploader.removeFile(uploader.getFile(ids[i]));
}
// Do something with file details
});
允許上傳只有一個文件:
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
if(uploader.files.length!=1){uploader.removeFile(file); return;}
});
});
允許一個文件一次選擇:
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
if(i){up.removeFile(file); return;}
});
});
允許一次上傳一個文件:
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
if(uploader.files.length!=1){uploader.removeFile(file); return;}
});
});
uploader.bind('FileUploaded', function(up, file,response) {
up.removeFile(file);
});
爲什麼不
if (files.length > 1) uploader.splice(1, files.length - 1);
試試這個。這對我來說可以。
uploader.bind('FilesAdded', function(up, files) {
if(uploader.files.length > 1)
{
uploader.removeFile(uploader.files[0]);
uploader.refresh();// must refresh for flash runtime
}
。 。 。 resto
想法是測試當前上傳對象中的num文件。如果長度大於1,則只需使用方法uploader.removeFile
。注意參數是files[0]
,它不是文件ID,而是完整的文件對象。
({id:"p17bqh1v4dp42gdf1gan75p16tp3", name:"gnome-globe.png", size:48456, loaded:0, percent:0, status:1})
此致敬禮!
刪除不必要的文件直接上傳之前:
$('uploadfiles').onclick = function()
{
while (uploader.files.length > 1)
{
uploader.removeFile(uploader.files[0]);
}
uploader.start();
return false;
};
現在你可以通過設置multi_selection選項假
就這樣
var uploader = new plupload.Uploader({
runtimes : 'html5,flash',
browse_button : 'button_id',
multi_selection:false, //disable multi-selection
...
正式禁用多選doc在這裏:http://www.plupload.com/documentation.php
其他方式做到這一點:
$(document).ready(function() {
var uploader = new plupload.Uploader({
...
multi_selection: false,
....
});
問候
顯然不適用於drag'n'drop ...(在當前版本中) –
這些答案都不對實際工作。
如果您想使用自定義上傳器,並且一次上傳一個文件,那麼不會自動上傳,並且添加最後一個文件成爲新文件。
uploader.bind('FilesAdded', function(up, files) {
// Clear the HTML
$('#plupload-files').html('');
// Plup is retarded and does not offer before file added event
if (up.files.length > 1) {
up.splice(0, up.files.length);
up.addFile(files[0])
return;
}
// $.each(files, function(){....
}
我們拼接整個陣列,因爲PLUP已經將所有的水壩文件到隊列中,如果拼接喜歡接受的答案隊列中,您將實際添加用戶嘗試添加文件一個文件每次,如果他們嘗試單獨添加一個新文件,它會將舊文件保留在文件數組中的位置[012]
然後我們添加他們嘗試添加的文件的第一個文件。這樣,隊列中只有一個文件,並且它始終是他們嘗試添加的最後一組文件中的第一個文件。
即。
拖至plupload 'file1.jpg', 'file2.jpg', 'file3.jpg'
清楚整個大壩隊列,加回 'file1.jpg'
拖至plupload「文件4 .JPG」, 'file5.jpg', 'file6.jpg'
清楚整個大壩隊列,加回 'file4.jpg'
拖至plupload 'file99.jpg'
明確整個大壩隊列,加回'file99.jpg'
如果您只想一次上傳一個文件,這允許您管理自定義插件。如上所述,其他答案只能使用一次,或使用自動開始上傳。
嘗試每個解決方案後,我想出了最簡單的 - 這似乎工作。
我正在使用核心API,我有multi_selection設置爲false。然後,在選擇第一個文件(添加)後,將插入到FilesAdded事件中的第二行代碼隱藏瀏覽鏈接。我不認爲這可以用jQuery Widget完成,我也發現除非上傳鏈接覆蓋瀏覽鏈接的位置,否則它仍然活着。
uploader.bind('FilesAdded', function(up, files) {
//line below hides button
document.getElementById("browse").style.display = "none";
var html = '';
plupload.each(files, function(file) {
html += '<li id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></li>';
});
document.getElementById('filelist').innerHTML += html;
});
我知道這已經回答了,但我去了一個解決方案是隻使用QueueChanged
回調:
QueueChanged: function(uploader) {
// Called when queue is changed by adding or removing files
//log('[QueueChanged]');
if(uploader.files.length > 1) {
uploader.files.splice(0, (parseInt(uploader.files.length) - 1));
}
}
有了這個代碼,只保留最後選定的文件(如果他們選擇的理由再次是因爲他們選擇了錯誤的文件)。
FilesAdded: function(up, files) {
up.files.splice(0,up.files.length-1);
},
multi_selection: false,
使用up.files
,只是files
。 files
將始終包含我們從文件瀏覽器中選擇的單個項目。 up.files
是我們需要縮小到最後選定文件的實際列表。
正如我在其他答案的評論中提到的,似乎max_file_count已被添加到jQuery UI小部件中。這仍然不適用於我的應用程序,因爲我想要一個人們可以上傳X個文件的存儲桶(因此需要考慮存儲桶中現有的上傳文件) –
感謝一種無需叉他們的JS;) – JohnO
提出的第二種方式刪除了我的所有文件,s.th.沒有任何文件可以使用。僅爲'i <(fileCount - 1)'運行循環只保留最近添加的文件。 –