使用jquery fileupload basic以编程方式删除文件

Fur*_*ion 17 jquery file-upload jquery-plugins blueimp

我正在使用blueimp文件上传插件(基本版)来实现多文件上传.我正在尝试实现允许用户删除排队文件以进行上载的功能.我无法弄清楚如何正确访问文件数组.每次在add回调中,索引为0,文件数组长度为1(它只包含用户单击要删除的文件).我正在为排队到div的每个文件添加一个链接,该文件是可点击的,如果点击则应删除该文件.

我的想法只是创建一个删除链接与文件的索引并从数组中删除它,但由于上述问题,索引永远不会正确.我也尝试过文件名,但是"on"回调中的文件名始终是第一个被选中上传的文件 - 我必须弄清楚一些关闭范围.

如何以编程方式从上载队列中删除文件?

HTML:

<div id="fileBrowserWrapper">
    <form id="myForm" action="#" method="post" enctype="multipart/form-data">
        <input id="uploadDocBrowse" type="file" name="files[]" multiple/>                                                    
    </form>
</div>
<div id="inputFilesBox"></div>
<div id="uploadFilesBox"></div>
Run Code Online (Sandbox Code Playgroud)

并且文件上传JavaScript:

$('#myForm').fileupload({
    url: "/SomeHandler",
    dataType: 'html',
    autoUpload: false,
    singleFileUploads: false,
    replaceFileInput: false,
    add: function (e, data) {
        console.log("Number of files: " + data.files.length);

        $.each(data.files, function (index, file) {                                       
            $('#uploadFilesBox').append("<div class='uploadBox' id='fileDiv_" + file.name + "'><div class='leftEle'><a href='#' id='link_" + index + "' class='removeFile'>Remove</a></div><div class='midEle'>" + file.name + "</div></div>")
            .on('click', { filename: file.name, files: data.files }, function(event) {                            
                var uploadFilesBox = $("#uploadFilesBox");
                var remDiv = $("#fileDiv_" + event.data.filename);
                remDiv.remove();
                event.data.files.splice(0, 1);                              
            }
        });
    });

    data.context = $('#myButton')
    .click(function () {
        data.submit();
    });              
});
Run Code Online (Sandbox Code Playgroud)

Fur*_*ion 15

我解决了这个问题 这是解释说明:

经过修补后我找到了解决方案.关键是要记住我正在回电话.因此,在删除功能的事件处理程序中,我只是将data.files数组清零,并且在该处理程序的提交中,我只提交文件数组的长度是否大于0.我清理了事件处理函数所以它更容易在眼睛上.HTML没有变化.

新的JavaScript处理代码:

 $('#myForm').fileupload({
            url: "/SomeUrl",
            dataType: 'html',            
            add: function (e, data) {
                $.each(data.files, function (index, file) {
                    var newFileDiv = $("<div class='uploadBox' id='fileDiv_" + file.name + "'><div class='leftEle'><a href='#' id='link_" + index + "' class='removeFile'>Remove</a></div><div class='midEle'>" + file.name + "</div></div>");
                    $('#uploadFilesBox').append(newFileDiv);

                    newFileDiv.find('a').on('click', { filename: file.name, files: data.files }, function (event) {                        
                        event.preventDefault();
                        var uploadFilesBox = $("#uploadFilesBox");
                        var remDiv = $(document.getElementById("fileDiv_" + event.data.filename));
                        remDiv.remove();                        
                        data.files.length = 0;    //zero out the files array                                     
                    });

                    data.context = newFileDiv;
                });

                $('#myButton')
                    .click(function () {
                        if (data.files.length > 0) {     //only submit if we have something to upload
                            data.submit();
                        }                                                    
                    });
            }
});
Run Code Online (Sandbox Code Playgroud)