AJAX多图像上传器出错

时间:2016-02-22 03:11:11

标签: javascript php jquery html ajax

我尝试使用PHP和JavaScript(jQuery使用$.ajax)制作图片上传器。

HTML:

<form method="post" action="php/inc.publicar.php" id="publicacion" enctype="multipart/form-data">
   <input type="file" id="file" name="file[]" accept="image/*" multiple />
   <p id="estado"></p>
</form>

JS:

var files;
$('#file').on('change', subiendoImagenes);

function subiendoImagenes(event) {
    files = event.target.files;
    event.stopPropagation();
    event.preventDefault();
    var fileSize = $(this).get(0).files[0].size;
    if (fileSize < 2097152) {
        var data = new FormData();
        $.each(files, function(key, value) {
            data.append('file', value);
        });

        $.ajax({
            url: 'php/inc.uploadFile.php',
            cache: false,
            contentType: false,
            processData: false,
            type: 'post',
            data:  data,
            beforeSend: function() {
                $('#estado').html('Subiendo imagen por favor espere...');
            },
            success: function(data, textStatus, jqXHR) {
                if(typeof data.error === 'undefined') {
                    $('#estado').html(data);
                } else {
                    console.log('ERRORS: ' + data.error);
                }   
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log('ERRORS: ' + textStatus);
            }
        });
    } else {
        $('#estado').html('El peso de la imagen que intenta subir, excede los <strong>2MB</strong>')
    }
}

PHP:

$errors = 0;
if(isset($_POST) && $_SERVER["REQUEST_METHOD"] == "POST") {
    if (array_key_exists('file', $_FILES)) {
        $image = $_FILES["file"]["name"];
        $imagenSubida = $_FILES['file']['tmp_name'];
        $max_file_size = 2097152; // 2 MB

        foreach ($image as $f => $name) { // Line of error
            // all code here works correctly
        } // Fin Foreach
    } else { echo 'Error inesperado.'; }
}

我认为问题出在JavaScript中。我认为当你提交文件时,它只发送一个文件。

** var_dump($_FILES)上传3个文件:**

enter image description here

为什么不发送所有文件?

1 个答案:

答案 0 :(得分:3)

错误是:data.append('file', value);请将其更改为

$.each(files, function(key, value) {
  data.append('file[]', value);
});