Добавить файл в JSON в клиенте и получить на API-сервере в PHP - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь отправить файл и некоторые другие данные жестоко в API. Я хочу добавить данные в файл JSON и отправить. Я могу сделать это, но на сервере я не могу получить загруженный файл. Когда я не использую формат JSON, у меня нет проблем с доступом к $ _file, но в JSON у меня нет файла, у меня есть только некоторые строки данных

клиент:

if (isset($_REQUEST['action'])) {
    if ($_REQUEST['action'] == 'submit') {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
        //curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_ENCODING, '');
        curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

        $filePath = $_FILES['file_upl']['tmp_name'];
        $type = $_FILES['file_upl']['type'];
        $fileName = $_FILES['file_upl']['name'];
        echo "filePath::" . $filePath;
        echo "<br>fileName:" . $fileName;
         $data = (['name' => 'Foo', 'file_upl' => curl_file_create($filePath, $type, $fileName)] );

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $data ) );
        $result = curl_exec($ch);
        curl_close($ch);
        echo "<br>result: " . $result;
    }
}?>
<form name="file_up" action="" method="POST" enctype="multipart/form-data">
    Upload your file here
    <input type="file" name="file_upl" id="file_upl"/>
    <input type="submit" name="action" value="submit"/>
</form>

служат:

  $data = json_decode(file_get_contents('php://input'), true);
        echo "<pre>";
        echo 'in web SErvice: <br/>';
        echo (print_r($data));
        echo (print_r( $data->)); 
        echo $data->file_upl->name;
        echo $data->file_upl->tmp_name;

move_uploaded_file($data->file_upl->name, Yii::app()->basePath . "/files/" . $data->file_upl->postname);

результат:

stdClass Object
(
    [name] => Foo
    [file_upl] => Array
        (
            [0] => stdClass Object
                (
                    [name] => C:\xampp\tmp\php8843.tmp
                    [mime] => image/jpeg
                    [postname] => 1-7.jpg

для меня важно использовать формат JSON. Скажите, пожалуйста, как использовать объект класса std в методе move_uploaded_file, который можно получить из файла.

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