为什么我的上传临时文件夹中有两个文件? [英] Why do I get two files in my upload temp folder?

查看:81
本文介绍了为什么我的上传临时文件夹中有两个文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I use PHP in a form to upload files. But I get two files in windows temp (I use IIS). But When I move the file I get one file.

html

<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>

上传Ajax文件

    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")
    ?>

../uploads有一个文件,但Windows temp有两个用于上载文件的临时文件.

../uploads have one file but windows temp have two temp files for the uploaded file.

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

Send the order. sendOrder.php picks up all the fields expect the file upload and send them in a email.

//Send order form
$('#order-form').submit(function(e){
    e.preventDefault();
    var formData = new FormData(this);
    $.ajax({
        type: 'POST',
        url: 'src/sendOrder.php',
        data: formData,
        processData: false,
        contentType: false,
        success: function (response) {
            console.log(response);
        },
        cache: false
    });
    uploadFile(formData);
})

推荐答案

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

You get two files because you do request src/sendOrder.php twice. First time you do it in ajax request (last code block in your post), second time is when you call function uploadFiles(formData) after ajax request.

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

You should try to exclude $.ajax(...) from last code block. Or exclude uploadFiles(formData), but progress bar will not work.

这篇关于为什么我的上传临时文件夹中有两个文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆