4

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

无论如何,就我而言,我有一张带有按钮图片的表格:

在此处输入图像描述

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

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

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

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

谢谢你。

4

3 回答 3

4

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

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

$('#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;
        });
     ...
)};

如您所见,我在添加事件中使用“newfileDiv(file.name)”创建了我的文件数据集。这将创建一个 div,其中包含有关文件的所有信息(名称、大小、...)和一个用于从列表中删除文件的 ankor。在这个 ankor 上,我绑定了一个单击事件,其中我有删除实现。

希望这可以帮助!

于 2013-03-25T08:49:21.503 回答
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');

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

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

于 2013-07-01T18:19:30.943 回答
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 文件中找到。

于 2014-07-09T16:33:08.527 回答