3

我正在尝试 Uploadify 以清除上传队列并删除上传的文件。问题是这样的。如果我上传 5 个文件(一uploadLimit组 5 个),它们是第一次上传。但是如果我使用这个清除队列:

<a class="button" href="javascript:jQuery('#attachment').uploadify('cancel', '*');">Clear Upload Queue</a>

它会从屏幕上直观地删除文件,但我仍然无法上传更多文件。我尝试使用:

jQuery('#attachment').uploadify('settings', 'uploadLimit', 5)inonQueueClear但它不会重置uploadLimit. uploadLimit队列清除后如何重置?这是我的代码:

jQuery('#attachment').uploadify({
    swf: '/javascript/uploadify/uploadify.swf',
    uploader: '/javascript/uploadify/uploadify.php',
    uploadFolder: 'temp',
    uploadTime: UPLOAD_TIME,
    uploadToken: UPLOAD_TOKEN,
    cancelImage: '/javascript/uploadify/cancel.png',
    fileTypeExts: '*.jpg; *.gif; *.png; *.jpeg; *.doc; *.docx; *.zip; *.pdf; *.xls; *.xlsx; *.JPG',
    fileTypeDesc: 'Allowed Files',
    auto: true,
    multi: true,
    removeCompleted: false,
    simUploadLimit: 1,
    fileSizeLimit: '3MB',
    allowedFiles: '*.jpg; *.gif; *.png; *.jpeg; *.doc; *.docx; *.zip; *.pdf; *.xls; *.xlsx; *.JPG',
    // allowedFiles:    '*.cdt;*.con;*.doc;*.docx;*.dxd;*.gif;*.jpg;*.jpeg;*.key;*.lab;*.mov;*.mp4;*.m4v;*.pdf;*.png;*.pps;*.ppt;*.pptx;*.rst;*.txt;*.wmv;*.xls;*.xlsx;*.zip',
    uploadLimit: 5,
    width: 210,
    height: 40,
    buttonText: 'Click to Add Up to 5 Attachments',
    buttonImage: '/images/content/mail/add-attachments.png',
    onUploadStart: function (file) {
        jQuery('.submit').attr('disabled', 'disabled');

        if (parseInt($.cookie('size')) > 0) {
            $.cookie('size', parseInt($.cookie('size')) + file.size);
        } else {
            $.cookie('size', file.size);
        }

        if (parseInt($.cookie('size')) > 30000000) {
            alert('You have exceeded the maximum queue size.  Please delete one or more files from your upload.  You can clear your queue by clicking the button below.');
            jQuery('#attachment').uploadify('cancel', '*');
        }
    },
    onUploadSuccess: function (file, data, response) {
        jQuery('.submit').removeAttr('disabled');

        try {
            obj = jQuery.parseJSON(data);
            if (obj.success) {
                jQuery('#' + file.id).append('<input type="hidden" name="temp_image_path[]" value="' + obj.file.name + '" /><input type="hidden" name="original_name[]" value="' + obj.file.original_name + '" />');
            }
        } catch (e) {
            // do nothing
        }


    },
    onUploadError: function (file, errorCode, errorMsg, errorString) {
        alert('The file ' + file.name + ' could not be uploaded: ' + errorString);
    },
    onQueueComplete: function () {
        jQuery('.submit').removeAttr('disabled');
    },
    onClearQueue: function (queueItemCount) {
        //jQuery('.submit').attr('disabled', 'disabled');
        var file = (queueItemCount == 1) ? 'file has' : 'files have';
        alert(queueItemCount + ' ' + file + ' been removed from your upload queue.  You have no files pending upload.');
        $.cookie('size', 0);
        jQuery('#attachment').uploadify('settings', 'uploadLimit', 5);
    },
    formData: {
        'filetypes': '*.jpg; *.gif; *.png; *.jpeg; *.doc; *.docx; *.zip; *.pdf; *.xls; *.xlsx; *.JPG',
            'folder': 'temp',
            'time': UPLOAD_TIME,
            'token': UPLOAD_TOKEN
    }
});
4

2 回答 2

5

我也找不到开箱即用的解决方案。该cancel方法仅影响尚未上传的文件。

我建议您可以使用自定义处理程序来删除上传的文件(或所有文件)。附近的某个地方 unlink打电话。而且您可以 - 不重置uploadLimit为 5,而是uploadLimit通过删除的文件数增加。

但是uploadify 对象仍然有关于上传文件的信息——这意味着如果用户尝试加载相同的文件,他将收到关于重复文件的警告消息。您可以清除此集合:

var files = $('#attachment').data('uploadify').queueData.files = [];
for (var member in files) delete files[member];

从您的代码中使用它可能不正确,但您可以扩展插件。

于 2013-08-22T15:15:04.173 回答
0

正如 Grin 所说,cancel 方法只影响尚未上传的文件。

我找到了一种方法来编辑插件用于检查队列是否已达到上传限制的值。

$('#attachment').data('uploadify').uploads.count

您可以在删除上传的图像时编辑该字段

//on method that removes an image
$('#attachment').data('uploadify').uploads.count--;

从这里开始,插件将完成剩下的工作来检查文件队列的大小。此外,我们避免编辑插件选项。

于 2016-03-15T15:51:50.277 回答