FineUploader同时多次上传同一文件

时间:2013-05-09 21:32:52

标签: fine-uploader

假设我想一次上传多个文件,这是我在将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让我这样做?

提前致谢

1 个答案:

答案 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;
    });