3

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

提前致谢

4

1 回答 1

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;
    });
于 2013-05-09T21:53:19.800 回答