blueimp文件上传。如何清理现有文件列表

时间:2013-03-25 05:02:13

标签: file-upload blueimp

我已经瞪眼了很多,但还没找到解决我问题的方法。小部件的作者引用了FAQ的最后一个答案,但FAQ没有答案,或者我找不到答案。我想从那时起它就更新了。其他同样面临同样问题的人也问了同样的问题,但没有提供任何解决方案。

无论如何,在我的情况下,我有一个带按钮的表格图片:

enter image description here

当用户单击其中一个图片按钮时,将显示模态对话框。用户现在可以管理所选行的图片。他可以上传,删除图片等。当用户打开表格中第二行的对话框时,他应该看到第二行的图片。它告诉我每次用户点击图片按钮以查看对话框时,我必须清理上传文件列表。他将收到与服务器中所选行相对应的图片列表。不幸的是,当我检索所选行的列表时,收到的文件将被添加到现有列表中。

你能告诉我如何清除列表或重置小部件而不删除服务器端的文件吗?

更新我已使用以下代码作为临时解决方案。

    jQuery.ajax({
        url: "<YOUR URL HERE>",
        dataType: 'json',
        context: $('#fileupload')[0]
    }).done(function (result) {
        jQuery("#fileupload").find(".files").empty(); //this line solves the issue

        jQuery(this).fileupload('option', 'done').call(this, null, { result: result });
    });

谢谢。

3 个答案:

答案 0 :(得分:3)

我也尝试了一个小时来完成上传工作;)

这是我如何解决这个问题:

$('#html5FileInput').fileupload({
    ....
    add: function (e, data) {
        $.each(data.files, function (index, file) {
            var newFileDiv = $(newfileDiv(file.name));
            $('#fsUploadProgressHtml5').append(newFileDiv);

            newFileDiv.find('a').bind('click', function (event) {
                event.preventDefault();
                var uploadFilesBox = $("#fsUploadProgressHtml5");
                var remDiv = $(document.getElementById("fileDiv_" + event.data.filename));
                removeFileFromArray(event.data.filename);
                remDiv.remove();
                data.files.length = 0;
                ...
            });

            data.context = newFileDiv;
        });
     ...
)};

你可以看到我在add-event中创建了我的文件数据集'newfileDiv(file.name)'。这将创建一个div,其中包含有关文件(名称,大小,...)的所有信息以及用于从列表中删除文件的ankor。在这个ankor上我绑定了一个click事件,其中我有删除实现。

希望这有帮助!

答案 1 :(得分:1)

我知道这不是最优雅的解决方案,但我需要一个非常快速和肮脏的...所以这就是我所做的(使用jQuery)。

//manually trigger the cancel button for all files...removes anything that isn't uploaded yet
$('.fileupload-buttonbar .cancel').first().trigger('click');

//check the checkbox that selects all files
if(!$('.fileupload-buttonbar .toggle').first().checked) {
    $('.fileupload-buttonbar .toggle').first().trigger('click');
}

//manually trigger the delete button for all files
$('.fileupload-buttonbar .delete').first().trigger('click');

我知道这不是最好的方法。我知道它不优雅......但它适用于我并从插件中删除所有内容。

如果您已将插件中的文件名或其他内容添加到任何本地数组或对象,则需要手动清理它们(我有几个处理程序在fileuploadaddedfileuploadsent上启动,fileuploadcompletefileuploadfailed和'fileuploaddestroyed`事件)。

答案 2 :(得分:0)

protected function get_file_objects($iteration_method = 'get_file_object') {
    $upload_dir = $this->get_upload_path();
    if (!is_dir($upload_dir)) {
        return array();
    }
    return array_values(array_filter(array_map(
        array($this, $iteration_method)
        //scandir($upload_dir)
        //File listing closed by Doss
    )));
}

有一个scandir函数负责列出文件。只是像我上面所做的那样取消注释,你的问题就解决了。它可以在UploadHandler.php文件中找到。