使用uploadifive进行多文件上载会导致check_exists的重复调用

时间:2013-12-15 17:08:12

标签: jquery uploadify uploadifive

使用uploadifive(HTML5版本而不是基于Flash的uploadify)如下:

$('#file_upload').uploadifive({ //setup uploadify
    'auto'             : false,
    'removeCompleted'  : true,
    'checkScript'    : 'check-exists.php',
    'formData'         : {
                              'timestamp' : '<?php echo $timestamp;?>',
                              'token'     : '<?php echo md5('unique_salt' . $timestamp);?>'
                         },
    'queueID'          : 'queue',
    'uploader'         : 'uploadifive.php',
    'onUploadFile'     : function(file) {
                            //alert('The file ' + file.name + ' is being uploaded.');
                         },
    'onCheck'          : function(file, exists) {
                           //alert ('onCheck: ' + file.name + '/' + exists);
                         },
    'onUploadComplete'  : function(file, data) { 
                          //alert (file.name + ': ' + data); 
                         }
});

用这个简单的形式:

<form>
    <div id="queue"></div>
    <input id="file_upload" name="file_upload" type="file">
    <a style="position: relative; top: 8px;" href="javascript:$('#file_upload').uploadifive('upload')">Upload Files</a>
</form>

如果我将一个或两个文件加载到一个空文件夹中,一切正常 如果我加载3个或更多,我得到一个可变数量的重复调用check_info.php。例如,如果我将五个文件上传到一个空文件夹,根据firebug,有15个调用check_info 1表示文件1,返回0(即文件不存在)
2为文件2,均返回0
3为文件3,全部返回0
4为文件4,1返回0和3返回1(即文件存在)
5为文件5,2返回0,3返回1
多次返回0我可以忍受(尽管效率非常低),因为它们对用户是不可见的,但是6的返回值为1,每个都会生成警告消息,用户必须响应。 我不知道为什么会这样。看过上传代码,但它超出了我对jQuery的有限知识 感谢任何建议/建议/治疗等等 Tx提前

1 个答案:

答案 0 :(得分:2)

我在测试期间遇到了这个问题。我通过修改源代码来解决这个问题...你必须寻找评论“//循环浏览文件”以找到它的位置。基本上,我只是运行两个循环...一个用于检查,另一个用于上传以避免冲突。

// Loop through the files to run check scripts first...
if (settings.checkScript) {
    $('#' + settings.queueID).find('.uploadifive-queue-item').not('.error, .complete').each(function () {
        _file = $(this).data('file');
        if (typeof _file.skipFile === 'undefined') {
            _file.skipFile = $data.checkExists(_file);
        }
    });
}
// Loop through the files for uploading...
$('#' + settings.queueID).find('.uploadifive-queue-item').not('.error, .complete').each(function() {
    _file = $(this).data('file');
    // Check if the simUpload limit was reached
    if (($data.uploads.current >= settings.simUploadLimit && settings.simUploadLimit !== 0) || ($data.uploads.current >= settings.uploadLimit && settings.uploadLimit !== 0) || ($data.uploads.count >= settings.uploadLimit && settings.uploadLimit !== 0)) {
        return false;
    }
    if (!_file.skipFile) {
        $data.uploadFile(_file, true);
    }
});

当然希望我有办法对作者进行其他修复,但他的论坛已关闭,他无法与他联系。我只想说,这不是我遇到的唯一问题。