我可以使用body raw发送数据,但不能使用postman中的post方法发送数据

问题描述 投票:0回答:2

我只是想用我的更新个人资料 API 上传个人资料图片。我可以使用 json (post)方法简单地通过 body raw 发送数据,但是对于上传文件,我使用 formdata,并且我无法发送任何数据。我只收到请提供输入详细信息的回复。

这是我的API控制器代码

 public function update_profile()
{
    $this->default_file();
    $responseData = array();
    if(!empty($_POST['u_id']))
    {
        $id = $_POST['u_id'];
        $userData['u_id'] = $id;
        $userData['username'] = $_POST['username'];
        $userData['usermob'] = $_POST['usermob'];
        $userData['userlocation'] = $_POST['userlocation'];

        $update_profile = $this->apm->update_profile($userData);

        if(!empty($update_profile))
        {
            $id = $_POST['u_id'];
            $userDetails = array();
            $userDetails['id'] = $id;
            $getUserDetails = $this->apm->getUserDetails($userDetails);

            $responseData['u_id'] = $getUserDetails['result']['u_id'];
            $responseData['username'] = $getUserDetails['result']['username'];
            $responseData['useremail'] = $getUserDetails['result']['useremail'];
            $responseData['usermob'] = $getUserDetails['result']['usermob'];
            $responseData['userlocation'] = $getUserDetails['result']['userlocation'];

            $responseArray = array(
                'apiName' => 'update profile',
                'version' => '1.0.0',
                'responseCode' => 200,
                'responseMessage' => "Your profile updated successfully",
                'responseData' => $responseData
            );
        }
        else
        {
            $responseArray = array(
                'apiName' => 'update profile',
                'version' => '1.0.0',
                'responseCode' => 204,
                'responseMessage' => "error in updating profile",
                'responseData' => null//$responseData
            );
        }
    }
    else
    {
        $responseArray = array(
            'apiName' => 'update profile',
            'version' => '1.0.0',
            'responseCode' => 204,
            'responseMessage' => "Sorry, please provide your input details.",
            'responseData' => null//$responseData
        );
    }
    echo json_encode($responseArray);
    die();
}

我正在提交代码,但没有添加图像部分代码来使用formdata检查简单的提交数据。

这是我的api模态代码

public function update_profile($userData)
{
    return $this->db->update('users', $userData, array('u_id' => $userData['u_id']));
}

public function getUserDetails($userDetails = array())
{
    $arrData = array();
    if($userDetails['id'])
    {
        $where = "u_id='". $userDetails['id']."'";
        $this->db->select('*');
        $this->db->from('users');
        $this->db->where($where);
        $result = $this->db->get()->result_array();
        if(!empty($result))
        {
            $arrData['result'] = $result[0];
        }
        else
        {
            $arrData['result'] = '';
        }
    }
    return $arrData;
}

这是默认文件代码

 function default_file(){
    header("Access-Control-Allow-Origin: * ");
    header("Access-Control-Allow-Headers: Origin,Content-Type ");
    header("Content-Type:application/json ");
    $rest_json = file_get_contents("php://input");
    $_POST = json_decode($rest_json,true);
}

请帮助我使用 formdata 运行我的代码,以便我可以通过该 api 上传图像。

php api postman codeigniter-3
2个回答
0
投票

FormData 对象不会编码为 JSON(这是明智的,因为 JSON 不支持文件数据类型,而 FormData 的最大好处就是它支持)。

FormData 对象将被编码为

multipart/form-data
,它将由 PHP 自动解析并用于填充
$_POST
$_FILES

不幸的是,您的代码(

$_POST = json_decode($rest_json,true);
)会用尝试解析的结果覆盖您想要的数据,作为 JSON,而不是 JSON。

注意:使用 FormData 时,请确保不要覆盖请求中的

Content-Type
标头。


0
投票

在我的例子中,它显示了 --->{"apiName":"更新产品","version":"1.0.0","responseCode":204,"responseMessage":"请提供产品 详细信息。","responseData":null}

© www.soinside.com 2019 - 2024. All rights reserved.