Javascript jQuery文件上载:检测是否选择了相同的文件

Javascript jQuery文件上载:检测是否选择了相同的文件,javascript,jquery,file-upload,uploadify,jquery-file-upload,Javascript,Jquery,File Upload,Uploadify,Jquery File Upload,我在我的网站上使用jQuery文件上传插件 用户按下“浏览…”按钮后,我调用uploadadd回调。 但是,每次用户添加文件时,它都会激发。即使他添加了相同的文件 我需要的是对每个唯一的文件只启动一次uploadadd回调,或者获取文件的唯一标识符,以便将其存储在文件数组中。在这种情况下,我可以检测文件是否已被选中 我尝试使用回调函数的数据数组: function (e, data) { } 但它只包含filesize/filename/filetype信息,所以我无法从中创建唯一的哈希,因为

我在我的网站上使用jQuery文件上传插件

用户按下“浏览…”按钮后,我调用uploadadd回调。 但是,每次用户添加文件时,它都会激发。即使他添加了相同的文件

我需要的是对每个唯一的文件只启动一次uploadadd回调,或者获取文件的唯一标识符,以便将其存储在文件数组中。在这种情况下,我可以检测文件是否已被选中

我尝试使用回调函数的数据数组:

function (e, data) { }
但它只包含filesize/filename/filetype信息,所以我无法从中创建唯一的哈希,因为两个或多个文件可以具有相同的信息

这是我的密码:

$('#fileupload').fileupload({
    url: "/upload/",
    dataType: 'json',
    autoUpload: false,
    add: function (e, data) {
        console.log(data.files[0]);
        qcount += 1;
        $('#select-button').text(qcount + ' files');

        data.submit();
    });
});
在Uploadify插件中,我可以使用onAddQueueItem回调,但jQuery文件上传似乎没有相同的功能


提前谢谢

试试这样的方法:

$('#fileupload').fileupload({
    url: "/upload/",
    dataType: 'json',
    autoUpload: false,
    add: function (e, data) {
        data.files = $.map(data.files, function(file,i){
            if ($.inArray(file.name,currentfiles) >= 0) { 
                alert("file exists");
                return null; 
            }
            return file;
        });

        console.log(data.files[0]);
        qcount += 1;
        $('#select-button').text(qcount + ' files');

        data.submit();
    });
});

您不必使用
file.name
。您可以使用
file.name
+
file.size
作为哈希。

我不能使用file.name+file.size作为哈希,因为它不安全。如果有两个名为“1.jpg”且大小为1024字节的文件怎么办?我尝试了您的源代码,但当我上载两个不同的图像但文件名和文件大小相同时失败了。对您来说,哪一个更重要?两个文件具有相同的名称和文件大小?您始终可以在后端编写代码来捕获其中一个。我认为在前端捕获相同的文件大小和文件名更有意义,但是如果你想让人们这样做,那么,好吧。我需要在前端捕获它以显示文件数。你的代码无法做到这一点。它不计算具有相同名称和大小的不同文件。我需要的是计算每个文件的数量,不包括它本身。