Код ошибки 4 при загрузке нескольких файлов через Ajax Php - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь загрузить несколько файлов через Php и ajax, и при этом получаю код ошибки 4.

Моя форма выглядит так:

<script>
$(document).ready(function () {
    $("form#postForm").submit(function (e) {
        e.preventDefault();
        var $form = $(this);
        var formData = new FormData($form[0]); // note [0] here
        $.ajax({
            url: "postHandler",
            type: 'POST',
            data: formData,
            success: function (response) {
                response = JSON.parse(response);
                alert(response.message);
                if (response.success) {
                    window.location.reload();
                }
            },
            error: function () {
                alert("error");
            },
            cache: false,
            contentType: false,
            processData: false
        });
    });
});

<form id="postForm" enctype="multipart/form-data">
    <input id="file-upload" name="images[]" type="file"/>

    <input id="file-upload" name="images[]" type="file"/>

    <input id="file-upload" type="file" name="file[]"/>

    <input id="file-upload" name="file[]" type="file"/>

    <input id="file-upload" name="file[]" type="file"/>

    <input id="file-upload" name="file[]" type="file"/>

    <input id="file-upload" name="video" type="file"/>
    <input type="submit" class="post-button" name="submit" value="send"/>
</form>

И моя проверка php такая:

$file_field = "images";
    $filenameArr = [];
    if (!empty(array_filter($_FILES[$file_field]['name']))) {
        foreach ($_FILES[$file_field]['name'] as $key => $val) {
            if ($_FILES[$file_field]["error"][$key] !== UPLOAD_ERR_OK) {
                debugToConsole($_FILES[$file_field]["error"][$key]);
                throw new Exception('There was an error');

            }
        }
    }

Я получаю ошибку 4, и я не понимаю, почему, пожалуйста, помогите

1 Ответ

0 голосов
/ 08 ноября 2019

Ошибка 4 = UPLOAD_ERR_NO_FILE -> так что файл не был загружен.

Я попробовал ваш код, и он работает, если все загрузки заполнены (с этой проверкой по крайней мере обе загрузки "изображений")

Если заполнен только один из обновлений изображения, возникает исключение.

Если также возможна одиночная загрузка, вам необходимо адаптировать свой чек, потому что $_FILES["images"]["error"] в этом случае всегда будет содержатьвторая запись с кодом ошибки. Чтобы избежать этого и вызвать исключение, только если одна (заполненная) загрузка действительно пошла не так, используйте такую ​​проверку:

foreach($_FILES[$file_field]['name'] as $key => $name){
        if(!empty($name) && $_FILES[$file_field]['error'][$key] !== UPLOAD_ERR_OK){
                echo "at least one upload is broken";
        }
}
...