微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的上传临时文件夹中有两个文件?

如何解决为什么我的上传临时文件夹中有两个文件?

我以某种形式使用PHP上传文件。但是我在Windows temp中得到了两个文件(我使用IIS)。但是当我移动文件时,我得到一个文件

html

var myDataMob = "";

if (data.data == "mob_num_header") myDataMob = data.data;

上传Ajax文件

<form id="order-form" class="needs-validation" method="post" enctype="multipart/form-data" novalidate>
<!-- about 20 input fields --> 
                                    <div class="modal-footer">
                                        <button id="send-button" class="btn btn-primary btn-lg btn-block" type="submit">Send order</button>
                                        <div id="send-information">
                                            <small><span id="procent">0%</span> complete or <span id="loaded">0</span> of <span id="file-size">0</span></small>
                                            <div class="progress">
                                                <div id="progressNumber" class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div>
                                            </div>
                                        </div>
                                    </div>

../ uploads有一个文件,但Windows temp的上传文件有两个temp文件

发送订单。 sendOrder.PHP提取所有期望文件上载的字段,并通过电子邮件发送。

    function fileSelected() {
        var file = document.getElementById('filetoUpload').files[0];
    
        if (file) {
            var fileSize = 0;
            if (file.size > 1024 * 1024)
            fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
            else
            fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
            
            document.getElementById('file-size').innerHTML = fileSize;
        }
    }
    
    function uploadFile(fd) {
        fd.append("filetoUpload",document.getElementById('filetoUpload').files[0]);
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener("progress",uploadProgress,false);
        xhr.addEventListener("load",uploadComplete,false);
        xhr.addEventListener("error",uploadFailed,false);
        xhr.addEventListener("abort",uploadCanceled,false);
        
        // stop the non-ajax form post
        fd.preventDefault();
        
        xhr.open("POST","src/fileUpload.PHP");
        xhr.send(fd);
    }
    
    function uploadProgress(evt) {
        if (evt.lengthComputable) {
            var percentComplete = Math.round(evt.loaded * 100 / evt.total);
            
            //var loaded = 0;
            if (evt.loaded > 1024 * 1024)
            loaded = (Math.round(evt.loaded * 100 / (1024 * 1024)) / 100).toString() + 'MB';
            else
            loaded = (Math.round(evt.loaded * 100 / 1024) / 100).toString() + 'KB';
            
            document.getElementById('procent').innerHTML = percentComplete.toString() + '%';
            document.getElementById('progressNumber').style.width = percentComplete.toString() + '%';
            
            document.getElementById('loaded').innerHTML = loaded.toString();
            
        }
        else {
            document.getElementById('progressNumber').innerHTML = 'unable to compute';
        }
    }
    
    function uploadComplete(evt) {
        /* This event is raised when the server send back a response */
        window.location.replace("src/successpage.html");
    }
    
    function uploadFailed(evt) {
        alert("There was an error attempting to upload the file.");
    }
    
    function uploadCanceled(evt) {
        alert("The upload has been canceled by the user or the browser dropped the connection.");
    }

and my PHP file upload in fileUpload.PHP

    <?PHP session_start(); /* Starts the session */
        
        //$fileName = $_FILES["filetoUpload"]["name"]; // The file name
        $fileName = $_SESSION['fileName'];
        $fileTmpLoc = $_FILES["filetoUpload"]["tmp_name"]; // File in the PHP tmp folder
        $fileType = $_FILES["filetoUpload"]["type"]; // The type of file it is
        $fileSize = $_FILES["filetoUpload"]["size"]; // File size in bytes
        $fileErrorMsg = $_FILES["filetoUpload"]["error"]; // 0 for false... and 1 for true
        
        move_uploaded_file($fileTmpLoc,"../uploads/$fileName")
    ?>

解决方法

您得到两个文件,因为您两次请求src/sendOrder.php。第一次是在ajax请求中执行此操作(帖子中的最后一个代码块),第二次是在ajax请求后调用函数uploadFiles(formData)

您应该尝试从最后一个代码块中排除$ .ajax(...)。或排除uploadFiles(formData),但进度条将不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。