首页 > 解决方案 > 获取后页面自动刷新,在 PHP 中使用“move_uploaded-file()”方法时

问题描述

我通过 fetch 发送文件并使用 move_uploaded_file() 方法在 PHP 中上传它们。问题是当我使用 move_uploaded_file() 方法时页面会自动刷新,即使我上传多个文件只是第一个上传并再次刷新页面。

PHP 代码

    if($img['error'] == 0 && $img['size'] > 0){
        if (!is_dir('naber')) {
            mkdir('naber', 0777, true);
        }
        
        $allowedExts = array("gif", "jpeg", "jpg", "png");
        // $extension = explode(".", $_FILES["image"]["name"]);
        // $extension = end($extension);
        $extension = pathinfo($img['name'])['extension'];
        if(!(in_array($extension, $allowedExts))){
            $result['status'] = false;
            $result['errmessage'] = 'Image type is invalid';
            exit(json_encode($result));
        }
        $target_path = 'naber/';
        $filename = time().'.'. strtolower($extension);
        $full_path = $target_path."".$filename;
        if(move_uploaded_file($img['tmp_name'], $full_path)){
            $result['status'] = true;
            $result['message'] = 'Image added successfully!';
        }else{
            $result['status'] = false;
            $result['errmessage'] = 'Image type is invalid';
            exit(json_encode($result));
        }
    }
    exit(json_encode($result));

Javascript代码:

if(document.querySelector('#submit')) document.querySelector('#submit').addEventListener('click', (e) =>{
    e.preventDefault();
    ...
    fd = new FormData();
    Array.from(document.querySelectorAll('.test')).some((t) => {
        .......
                tests['test'+i]['img'] = t.querySelector('.input-ifile').files[0];
                fd.append('test'+i+'-img',tests['test'+i]['img']);
        .......
    fetch('handlers/handler.php', { method: 'POST' , body: fd})
    .then(function (response) {
        return response.text();
    })
    .then(function (body) {
        console.log(body)
        return false;
    });
})

期望的结果是将文件上传到服务器,并且 index.php 不会被刷新。

标签: javascriptphpfetchmove-uploaded-file

解决方案


解决方案:花了几个小时发现问题后,发现问题不在代码中。这是因为 Visual Studio Live Server 扩展而发生的。为了防止自动重新加载,只需关闭实时服务器就足够了。


推荐阅读