4

我正在使用 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 的重复调用。例如,如果我将五个文件上传到一个空文件夹,根据萤火虫有 15 次调用 check_info。
1代表文件1,返回0(即文件不存在)
2代表文件2,都返回0
3代表文件3,都返回0
4代表文件4,1返回0,3返回1(即文件存在)
5代表文件5, 2 return 0, 3 return 1
我可以忍受 0 的多个返回(尽管它的效率很低),因为它们对用户是不可见的,但是 1 的 6 个返回每个都会生成一个警告消息,用户必须回应。
我不知道为什么会这样。看过uploadifive代码,但它超出了我对jQuery的有限知识。 提前
欣赏任何建议/建议/治疗/等Tx

4

1 回答 1

4

我在测试期间也遇到了这个问题。我通过修改源代码解决了这个问题……你必须寻找注释“//循环文件”才能找到它的去向。基本上,我只是运行两个循环......一个用于检查,另一个用于上传以避免冲突。

// 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);
    }
});

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

于 2014-06-24T21:39:21.703 回答