move_uploaded_file не перемещает изображение в постоянную папку || PHP - PullRequest
0 голосов
/ 26 апреля 2020

Я создаю приложение PHP, где новый пользователь должен загрузить аватар. Мне удалось сохранить путь к загруженному файлу в моей базе данных, но теперь мне нужно переместить загруженное изображение из временного в постоянный каталог, который является папкой «Аватары». Я искал много ответов на одну и ту же проблему, но не смог найти работающий. Так как я действительно новичок в PHP, мне понадобится помощь для рабочего решения.

Я также попытался copy() вместо move_uploaded_file, но безуспешно.

HTML:

<div class="input-form">
  <label for="avatar">Kies een profielfoto</label>
  <input type="file" id="avatar-input" name="avatar" accept="image/*" onchange="loadFile(event)">
  <img id="output" width="150" />
  <input type="submit" id="submit-btn" name="vervolledig-submit" value="START">
</div>

PHP:

if(!empty($_POST)){

    $fileSize = $_FILES["avatar"]["size"];

    if($fileSize < 2000000){

        $fileSizeOk = true;

    }else{

        throw new Exception("Je profielfoto heeft een grotere file size dan is toegelaten (max 2MB)");
        $imgSizeOk = false;

    }

    $img = $_FILES["avatar"]["name"];

    if($imgSizeOk == true){

        move_uploaded_file($_FILES["avatar"]["tmp_name"], "avatars/$img");

    }
}

РЕДАКТИРОВАТЬ: было предложено поделиться мой JS код:

  1. функция, которая показывает предварительный просмотр загруженного изображения:
let loadFile = function(event) {
    let image = document.getElementById('output');
    image.src = URL.createObjectURL(event.target.files[0]);
}; 
Предлагаемое решение для AJAX
$('#submit-btn').on('click', function() {
    var file_data = $('#avatar-input').prop('files')[0];   
    var form_data = new FormData();                  
    form_data.append('avatar', file_data);
    alert(form_data);                             
    $.ajax({
        url: 'profielVervolledigen.php', // point to server-side PHP script 
        dataType: 'text',  // what to expect back from the PHP script, if anything
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,                         
        type: 'post',
        success: function(php_script_response){
            alert(php_script_response); // display response from the PHP script, if any
        }
     });
});

со следующим php кодом:

if(!empty($_POST)){
    if ( 0 < $_FILES['avatar']['error'] ) {
        echo 'Error: ' . $_FILES['avatar']['error'] . '<br>';
    }
    else {
        move_uploaded_file($_FILES['avatar']['tmp_name'], 'avatars/' . $_FILES['avatar']['name']);
    }
}

, которое выдает предупреждение [object FormData]

Спасибо за любую помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...