当尝试从网页执行POST请求时,Slim 3为getUploadedFiles()返回array(0)

时间:2018-07-16 19:59:26

标签: javascript php slim-3

我正在尝试执行Post请求,以将一些虚拟数据存储到我的数据库中。数据集包含三个文本字段和一个文件。

遵循Slim 3 File Upload Documentation,我创建了完美运行的服务。

这是我的服务代码:

<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Slim\Http\UploadedFile;


$container = $app->getContainer();
$container['upload_directory'] = __DIR__ . '/uploads/';

$app->post('/np/register',function(Request $request, Response $response){
   $np_name = $request->getParam('np_name');
   $np_language = $request->getParam('np_language');
   $uploadedFiles = $request->getUploadedFiles();
   $upload_folder = '/uploads/';
   $directory = $this->get('upload_directory');
   $np_image_path = $uploadedFiles['np_image_path'];
   $np_active_status = $request->getParam('np_active_status');
   $register_date = date('Y/m/d H:i:s');

    //Getting the server ip
    $server_ip = gethostbyname(gethostname());


    try
    {

        $np_name_check = preg_match('~^[A-Za-z ]{3,20}$~i', $np_name);
        $np_language_check = preg_match('~^[A-Za-z_]{3,20}$~i', $np_language);
        $np_active_status_check = preg_match('/^[0-1]{1}$/', $np_active_status);

        if($np_name_check>0 && $np_language_check>0 && $np_active_status_check>0 && isset($np_name) && isset($np_language) && 
            isset($np_active_status) && isset($np_image_path))
        {

            $get_filename = moveUploadedFile($directory, $np_image_path);
            $ServerURL = 'http://'.$server_ip.'/np_console/src/routes'.$upload_folder.$get_filename;
            $np_image_path = $ServerURL;

            $sql = "INSERT INTO np_registration (np_name,np_language,np_image_path,np_active_status,np_register_date) VALUES (:np_name,:np_language,:np_image_path,:np_active_status,:register_date)";

            try 
            {

                //Get DB Object
                $db = new db();
                //Connect to database
                $db = $db->connect();

                $stmt = $db->prepare($sql);

                $stmt->bindParam(':np_name', $np_name);
                $stmt->bindParam(':np_language', $np_language);
                $stmt->bindParam(':np_image_path', $np_image_path);
                $stmt->bindParam(':np_active_status', $np_active_status);
                $stmt->bindParam(':register_date', $register_date);

                $stmt->execute();

                echo '{"notice":{"respnse":"NetPicks Added Successfully"}';
            }
            catch(PDOException $e)
            {
                echo '{"error":{"text":'. $e->getMessage() .'}}';
            }
        }
        else{
            echo '{"error":{"respnse":"\nInvalid Data Entry"}';
        }
    }
    catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}';
    }

});

function moveUploadedFile($directory, UploadedFile $uploadedFile)
{
    $extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);

    $basename = bin2hex(random_bytes(8));

    $filename = sprintf('%s.%0.8s', $basename, $extension);

    $uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);


    return $filename;
}

?>

我通过Postman发出的Post请求可以正常工作,并且我可以在数据库中插入值。

Postman Response

但是当我尝试从我的网页执行POST请求时,它失败了。使用var_dump时,我发现$ uploadedFiles总是返回array(0)。

邮政服务电话:

    export default function NP_Registration_Service(type, np_name, np_language, np_image_path, np_active_status){
    let BaseUrl = 'http://localhost/np_console/public/index.php';

    let formData  = new FormData();

    formData.append('np_name', np_name);
    formData.append('np_language', np_language);
    formData.append('np_image_path', np_image_path);
    formData.append('np_active_status', np_active_status);

    return new Promise((resolve,reject) => {
        fetch(BaseUrl+type,{
            method: 'POST',
            body: formData
        })
        .then((response) => {
            var resText = response.text();
            console.log("The resText");
            console.log(resText);

        })
        .catch((error) => {
            reject(error);
        });
    });

}

以下是带有var_dump($ uploadedFiles)的响应,该响应返回array(0)。

Console Output

我调查了this,但没有提供任何帮助。

那我打服务电话有误吗?

1 个答案:

答案 0 :(得分:0)

根据Karol Samborski添加的建议

var fileField = document.querySelector("input[type='file']");

formData.append('np_image_path', fileField.files[0]);

到邮政服务电话(提取请求)解决了该问题。