假设我想一次上传多个文件,这是我在将multiple选项设置为true时可以做的事情:
var myUploader = new qq.FineUploader({
element: $('#test')[0],
multiple: true,
request: { endpoint: 'path/to/master/server/php/' },
autoUpload: false,
});
现在,让我们说我有一个按钮,可以让我选择要上传的文件。如果我单击所述按钮并选择,例如test.txt文件,test.txt将被添加到将要上载的文件列表中。到现在为止还挺好。现在,我的问题是,如果我再次单击该按钮,再次选择test.txt文件,它将被添加到列表中,即使它已经在列表中。
有没有办法阻止FineUploader让我这样做?
提前致谢
答案 0 :(得分:3)
我会小心地根据名称声明文件重复。你也应该考虑到尺寸,至少。虽然,这在IE9及更早版本中是不可能的,因为我们无法在这些浏览器中确定客户端的文件大小。仅仅为了简单起见,让我们专门使用文件名......
一种方法是维护提交给上传者的文件名数组。您可以在onSubmitted
处理程序中添加此列表。您可以提供onValidate
处理程序,如果该文件中已存在该文件,则该句柄将拒绝该文件。您的代码看起来像这样:
var filenames = [];
var myUploader = new qq.FineUploader({
element: $('#test')[0],
multiple: true,
request: { endpoint: 'path/to/master/server/php/' },
autoUpload: false,
callbacks: {
onSubmitted: function(id, name) {
filenames.push(name);
},
onValidate: function(fileData) {
return qq.indexOf(filenames, fileData.name) < 0;
}
}
});
另外,只是为了踢,为什么不使用Fine Uploader的jQuery插件,因为你似乎已经在你的项目中使用了jQuery?上面的例子使用下面的jQuery插件重写:
var filenames = [];
$('#test').fineUploader({
multiple: true,
request: { endpoint: 'path/to/master/server/php/' },
autoUpload: false
})
.on("submitted", function(event, id, name) {
filenames.push(name);
})
.on("validate", function(event, fileData) {
return $.inArray(fileData.name, filenames) < 0;
});