Javascript 使用formdata进行多部分文件上载

Javascript 使用formdata进行多部分文件上载,javascript,php,jquery,ajax,file-upload,Javascript,Php,Jquery,Ajax,File Upload,我正在尝试上载一个包含formdata的文件。文件本身就可以工作,但我需要上传一些用户数据。我试图附加formdata,但是当我在ajax调用的php文件中“打印”数组($\文件)时,它没有出现在那里 如果有人对这个问题有解决方案,或者有更好的方法来处理带有userdata的文件上传,请让我知道 您可以在下面找到所使用的代码: php: AJAX文件上传 $(文档).ready(函数(){ $(“#但#上传”)。单击(函数(){ //控制台日志(“piemel”); log(document.

我正在尝试上载一个包含formdata的文件。文件本身就可以工作,但我需要上传一些用户数据。我试图附加formdata,但是当我在ajax调用的php文件中“打印”数组($\文件)时,它没有出现在那里

如果有人对这个问题有解决方案,或者有更好的方法来处理带有userdata的文件上传,请让我知道

您可以在下面找到所使用的代码:

php:


AJAX文件上传
$(文档).ready(函数(){
$(“#但#上传”)。单击(函数(){
//控制台日志(“piemel”);
log(document.getElementById('test').value);
var fd=新FormData();
var files=$('#file')[0]。文件[0];
fd.append('test',document.getElementById('test').value);
fd.append('file',files);
控制台日志(fd);
$.ajax({
url:'upload.php',
类型:'post',
数据:fd,
contentType:false,
processData:false,
成功:功能(响应){
如果(响应!=0){
$(“img”).attr(“src”,响应);
}
},
错误:函数(响应){
警报('错误:'+JSON.stringify(响应));
}
});
});
});
Ajax文件:

<?php

/* Getting file name */

$filename = $_FILES['file']['name'];

/* Location */
$location = "upload/".$filename;

/* Upload file */
if(move_uploaded_file($_FILES['file']['tmp_name'],$location)){
   echo $location;
}else{
    echo 0;
}

$\u文件
用于文件而非数据,因为您是通过post使用发送数据的
$\u post

我有一个用于此的示例演示代码(我也面临此问题并创建了此脚本)

index.php

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<form id="uploadForm" action="upload.php" method="post">
<label>Upload Image File:</label><br/>
<input name="userImage" type="file" class="inputFile" />
<input type='text' name="my_name" value="harish">
<input type="submit" value="Submit" class="btnSubmit" />
</form>

<script type="text/javascript">

$(document).ready(function (e) {

    $("#uploadForm").on('submit',(function(e) {

    e.preventDefault();

    $.ajax({

            url: "upload.php",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData:false,

            success: function(data){
                $("#targetLayer").html(data);
            },
            error: function(){}             
        });

    }));

});

</script>

上传图像文件:
$(文档).ready(函数(e){ $(“#uploadForm”)。在('submit',(函数(e)上{ e、 预防默认值(); $.ajax({ url:“upload.php”, 类型:“POST”, 数据:新表单数据(本), contentType:false, cache:false, processData:false, 成功:功能(数据){ $(“#targetLayer”).html(数据); }, 错误:函数(){} }); })); });
upload.php

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

if(isset($_FILES["userImage"]["type"]))
{
    $validextensions = array("jpeg", "jpg", "png");
    $temporary = explode(".", $_FILES["userImage"]["name"]);
    $file_extension = end($temporary);

    $file_type = $_FILES["userImage"]["type"];

    if ((($file_type == "image/png") || ($file_type == "image/jpg") || ($file_type == "image/jpeg")
    ) /*&& ($_FILES["file"]["size"] < 100000)*/ //Approx. 100kb files can be uploaded.
    && in_array($file_extension, $validextensions))
    {
        if ($_FILES["userImage"]["error"] > 0)
        {
            echo "Return Code: " . $_FILES["userImage"]["error"] . "<br/><br/>";
        }
        else
        {
            if (file_exists("uploads/" . $_FILES["userImage"]["name"] . '-'.time()))
            {
                echo $_FILES["userImage"]["name"] . time() ." <span id='invalid'><b>already exists.</b></span> ";
            }
            else
            {
                $sourcePath = $_FILES['userImage']['tmp_name']; // Storing source path of the file in a variable
                $targetPath = "uploads/".$_FILES['userImage']['name'].'-'.time(); // Target path where file is to be stored

                //check the writable permissions

                /*if (is_writeable('uploads/' . $_FILES['userImage']['name'])) {
                   die("Cannot write to destination file");
                }*/

                if(move_uploaded_file($sourcePath,$targetPath)) {

                    echo "<span id='success'>Image Uploaded Successfully...!!</span><br/>";
                    echo "<br/><b>File Name:</b> " . $_FILES["userImage"]["name"] . "<br>";
                    echo "<b>Type:</b> " . $_FILES["userImage"]["type"] . "<br>";
                    echo "<b>Size:</b> " . ($_FILES["userImage"]["size"] / 1024) . " kB<br>";
                    echo "<b>Temp file:</b> " . $_FILES["userImage"]["tmp_name"] . "<br>";

                } else {

                    echo "<pre>"; print_r($_FILES['file']['error']); echo "</pre>";
                }
            }
        }
    }
    else
    {
    echo "<span id='invalid'>***Invalid file Size or Type***<span>";
    }
}
?>

Hm.你想上传大文件吗?因为当我处理$_文件时,上载大于20mb的文件是不成功的,直到我将IIS中可上载的最大文件数设置为可传输的最大文件数。我唯一可以上传而不干扰IIS的就是普通图片


您的代码似乎没有错,因为它必须将临时文件放入您提供的位置,所以您到底想上传什么?您在代码中使用的文件夹“upload”,是否存在?如果文件夹不存在,它也不会移动任何文件

这非常适合我的需要。我只更改了$file_extension=end($temporary);到$file_extension=strtolower(end($temporary));
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

if(isset($_FILES["userImage"]["type"]))
{
    $validextensions = array("jpeg", "jpg", "png");
    $temporary = explode(".", $_FILES["userImage"]["name"]);
    $file_extension = end($temporary);

    $file_type = $_FILES["userImage"]["type"];

    if ((($file_type == "image/png") || ($file_type == "image/jpg") || ($file_type == "image/jpeg")
    ) /*&& ($_FILES["file"]["size"] < 100000)*/ //Approx. 100kb files can be uploaded.
    && in_array($file_extension, $validextensions))
    {
        if ($_FILES["userImage"]["error"] > 0)
        {
            echo "Return Code: " . $_FILES["userImage"]["error"] . "<br/><br/>";
        }
        else
        {
            if (file_exists("uploads/" . $_FILES["userImage"]["name"] . '-'.time()))
            {
                echo $_FILES["userImage"]["name"] . time() ." <span id='invalid'><b>already exists.</b></span> ";
            }
            else
            {
                $sourcePath = $_FILES['userImage']['tmp_name']; // Storing source path of the file in a variable
                $targetPath = "uploads/".$_FILES['userImage']['name'].'-'.time(); // Target path where file is to be stored

                //check the writable permissions

                /*if (is_writeable('uploads/' . $_FILES['userImage']['name'])) {
                   die("Cannot write to destination file");
                }*/

                if(move_uploaded_file($sourcePath,$targetPath)) {

                    echo "<span id='success'>Image Uploaded Successfully...!!</span><br/>";
                    echo "<br/><b>File Name:</b> " . $_FILES["userImage"]["name"] . "<br>";
                    echo "<b>Type:</b> " . $_FILES["userImage"]["type"] . "<br>";
                    echo "<b>Size:</b> " . ($_FILES["userImage"]["size"] / 1024) . " kB<br>";
                    echo "<b>Temp file:</b> " . $_FILES["userImage"]["tmp_name"] . "<br>";

                } else {

                    echo "<pre>"; print_r($_FILES['file']['error']); echo "</pre>";
                }
            }
        }
    }
    else
    {
    echo "<span id='invalid'>***Invalid file Size or Type***<span>";
    }
}
?>