我正在尝试删除FilesAdded事件中包含不允许扩展名的文件。 (我不能使用filter参数,因为我需要一个独占列表。)
我的代码有点像这样:
uploader.bind('FilesAdded', function(up, files) {
var count = files.length;
var i = 0;
for (i;i<count;i++) {
var validExt = validate(files[i].name);
if(!validExt){
如果扩展名无效,我需要删除添加的文件。我尝试了以下内容:
uploader.splice(i,1)
uploader.removeFile(files[i]);
uploader.refresh();
触发了FilesRemoved事件,但删除的文件仍然使用uploader.start()上传。
我不知道这是否是程序中的错误,或者太过模糊,不能期待一个简单的答案,但如果有人可以提供帮助,我会非常感激。我不认为我错过了任何明显的事情。
感谢。
答案 0 :(得分:5)
一些事情......
首先,您必须在调用init()函数后绑定filesAdded事件。
uploader.init();
uploader.bind('FilesAdded', function (up, files) {...}
第二,您可以在定义plupload时使用prop过滤器过滤文件扩展名
uploader = new plupload.Uploader({
...,
filters: [
{ title: "Image files", extensions: "jpeg,jpg,gif,png" }
],
...
});
此处第3个是从plupload中删除文件的工作示例
$.each(uploader.files, function (i, file) {
if (file && file.id != currentFile.id) {
uploader.removeFile(file);
}
});
干杯!
答案 1 :(得分:2)
如果没有上传进度,并且您想从上传者列表中删除所有排队的文件:
var queueLength = uploader.files.length;
for(i = 0; i&lt; queueLength; i ++){
if(uploader.files [0]&amp;&amp; uploader.files [0]!== undefined){
uploader.removeFile(uploader.files [0]);
}
}
注意:如果您尝试按索引删除文件,则某些文件会保留在列表中;因为每次从列表中删除文件项时,都会刷新它并使用索引。
答案 2 :(得分:1)
您需要将要删除的文件的ID传递给removeFile:
uploader.removeFile(files[i].id)
答案 3 :(得分:1)
您可以使用回调“QueueChanged”,它也适用于我。
uploader.bind('QueueChanged', function(up){
var file_count = up.files.length;
for(i = 0; i < file_count; i++) {
if(i != (file_count - 1)) up.removeFile(up.files[i]);
}
});
答案 4 :(得分:0)
uploader.bind('FilesAdded', function(up, files) {
if( files.length > 1 )
{
$.each(files, function(i, file) {
up.removeFile(file);
});
}
});