【问题标题】:How to delete one image from the array $_FILES using previews - Javascript / PHP如何使用预览从数组 $_FILES 中删除一张图像 - Javascript / PHP
【发布时间】:2019-10-01 10:29:23
【问题描述】:

我想在带有预览和删除选项的表单内创建一个多图像上传器。我使用 php 作为后端的一部分。

预览部分很简单。我已按照

中的说明进行操作

Image Upload with preview and Delete option - Javascript / Jquery

我想删除图像时出现问题。它已从预览中删除,但未从 e.target.files 数组中删除,因此当我在 php 中访问变量 $_FILES 时,我会获取所有图像,包括已删除的图像。

正如你在图片中看到的,如果我从最初的 5 个图像中删除两个图像,仍然有一条消息说我有 5 个文件。

我想知道如何完全删除这些图像,所以在 php 中我只访问尚未删除的图像。

谢谢。

【问题讨论】:

    标签: javascript php jquery html forms


    【解决方案1】:

    表格

    <form id="myForm" method="post">
    
    Files: <input type="file" id="files" name="files" multiple><br/>
    
    <div id="selectedFiles"></div>
    
    <input type="submit">
    </form>
    

    AJAX

     var selDiv = "";
            var storedFiles = [];
    
            $(document).ready(function() {
                $("#files").on("change", handleFileSelect);
    
                selDiv = $("#selectedFiles"); 
                $("#myForm").on("submit", handleForm);
    
                $("body").on("click", ".selFile", removeFile);
            });
    
            function handleFileSelect(e) {
                var files = e.target.files;
                var filesArr = Array.prototype.slice.call(files);
                filesArr.forEach(function(f) {          
    
                    if(!f.type.match("image.*")) {
                        return;
                    }
                    storedFiles.push(f);
    
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        var html = "<div><img src=\"" + e.target.result + "\" data-file='"+f.name+"' class='selFile' title='Click to remove'>" + f.name + "<br clear=\"left\"/></div>";
                        selDiv.append(html);
    
                    }
                    reader.readAsDataURL(f); 
                });
    
            }
    
            function handleForm(e) {
                e.preventDefault();
                var formdata = new FormData();
    
                for(var i=0, len=storedFiles.length; i<len; i++) {
                    formdata.append('files[]', storedFiles[i]); 
                }
    
                $.ajax({
                        url: "tab.php",
                        type: 'POST',
                        data: formdata,
                        dataType: "json",
                        contentType: false,
                        cache: false,
                        processData: false,
                        success: function(data) {
                            return true;
                        }
                    });
            }
    
            function removeFile(e) {
                var file = $(this).data("file");
                for(var i=0;i<storedFiles.length;i++) {
                    if(storedFiles[i].name === file) {
                        storedFiles.splice(i,1);
                        break;
                    }
                }
                $(this).parent().remove();
            }
    

    【讨论】:

    • 在给定这样的输入的情况下,如何获取已删除图像的 id? &lt;input type="file" id="files" name="img[]" multiple required/&gt;
    • @RJ-mac 不,上传图片时将data-id 添加到预览div 中删除按钮,如&lt;button class="remove" data-id="0"&gt;Remove&lt;/button&gt;
    • 好的,但是我必须把你的删除代码放在哪里?在stackoverflow.com/questions/37205438/…?中完成的删除点击功能内部?
    • @RJ-mac data-id在此处动态添加 0,1,2..&lt;span class=\"remove\" data-id="0"&gt;Remove image&lt;/span&gt;
    • @RJ-mac 请参阅编辑后的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多