我如何在PHP中获取由jQuery上传的图像


How I can get in PHP to image uploaded by jQuery

我正在使用图像上传选项编写简单的表单。我在PHP代码中通过jQuery访问我上传的文件时遇到问题。

如何在PHP中检查上传的文件名,大小?

.HTML:

    <form id="conversion_form" method="post" action="#" enctype="multipart/form-data">
            <input type="text" id="prize_name" size="25" value="">
<textarea rows="8" cols="75" name="lista_losowanie" id="lista_losowanie">
            <input id="file_img" type="file" name="image">
            <div id="uploadPreview"></div>
            </div>
            <p><input id="button_draw" class="btn btn-lg btn-success" type="submit" value="Losowanie" /></p>
            </form>

这是我的Ajax,发送prize_name效果很好,但是我上传的图像有问题。如何在 Ajax 中发送它并在我的 PHP 中接收?

阿贾克斯:

$('#button_draw').click(function(e) {
e.preventDefault();
    var formData = new FormData();
    // let's just take the first image
    var file = $('#file_img')[0].files[0];

    // but you also need to add the other fields to formData
    var lista = $(this).closest('form').find('#lista_losowanie').val();
    var prize_name = $(this).closest('form').find('#prizename').val();
    formData.append('prize_img', file);
    formData.append('lista', lista);
    formData.append('prize_name', prize_name);
    console.log(formData);
    alert (formData);

            $.ajax({
            context: this,
            url: './inc/new_draw.php',
            data: formData,
            type: 'POST',
            success: function(response){
            //odpowiedź serwera
            //Trzeba sparsować zwrot
            var json = JSON.parse(response);
            if(json.odp == 1){
            }
            if(response == 2){
            }
            },
            error: function(x,n,o){
            }
           });

  });

.PHP:

<?php
include ("config.php");
$prize_name = mysqli_real_escape_string($con, $prize_name);
$prize_img = mysqli_real_escape_string($con, $prize_img);
//HOW I CAN GET ACCESS TO UPLOADED IMAGE? HOW I CAN CHECK FILE SIZE ETC. THIS BELOW DOESNT WORK.
        $file_size = $prize_img['size'];
        $file_name = $prize_img['name'];
        $file_type = $prize_img['type'];
        echo $file_size;
        if ($prize_name == NULL) {
            $problem = TRUE;
            $problem_code = 1;
            echo json_encode($dodano);
        }
?>

Ajax 方法确实支持文件上传,但仅在较新的浏览器中。为此,您可以使用XmlHttpRequest2对象,理想情况下,请使用包含要提交的所有数据(+图像)的FormData对象,请参阅本文。

如果你想这样做,你可以通过HTML5 File API获取文件,快速示例:

var formData = new FormData();
// let's just take the first image
var file = $('#fileinput').files[0];
// but you also need to add the other fields to formData
var lista = $(this).closest('form').find('#lista_losowanie').val();
var prize_name = $(this).closest('form').find('#prizename').val();
formData.append('prize_img', file);
formData.append('lista', lista);
formData.append('prize_name', prize_name);
// now you pass the formData object as data
$.ajax({
    context: this,
    url: './inc/new_draw.php',
    data: formData,
    // ....
});

如您所见,文件是一个数组 - 因此,如果您在file input field上使用multiple select,您可以简单地遍历该数组以获取所有选定的图像。

在 PHP 端,如果使用 FormData ,则需要使用 $_FILES 数组。请参阅此处:PHP $_FILES 数组。

从我上面的例子中,您将像这样访问数组(还添加了扩展):

$size = $_FILES['prize_img']['size']
$name = $_FILES['prize_img']['name']
$type = $_FILES['prize_img']['type']
$extension = pathinfo($name, PATHINFO_EXTENSION);

使用XHR2您还可以做一些很酷的事情,例如跟踪上传文件的进度(进度条)。如果您需要兼容较旧的浏览器,可以使用iframes的方法:示例。