首页 > 解决方案 > 使用 php (curl) 将 Json 和音频文件发布到 laravel API

问题描述

我正在使用下面的代码将 json 和音频文件发布到我基于 laravel 构建的 api

     $endPoint = 'http://localhost:9000/api/audio/send';
     $apiKey = 'anvx7P7ackndaD8MvXlufSaG4uJ901raoWIwMPGZ93dkH';
     $url = $endPoint . '?key=' . $apiKey;
     $curlFile = new \CURLFile('/Users/desktop/myapp/public/Voice/aaaah.wav');            
     $data = array("request" => 
     json_encode(array("test" => "First audio ",'recipient' =>['442342342', '35345242'])) . ";
     type=application/json","file" => "@d8696c304d09eb1.wav;type=audio/wav");

                $ch = curl_init();
                $headers = array();
                $headers[] = "Content-Type: application/json";
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                $result = curl_exec($ch);
                $result = json_decode($result, TRUE);
                curl_close($ch);
            return $result;

当我将我的 json 提交给 api 时,它会从 api 返回 null。意味着没有数据被发布到我的 api。请问我如何将我的 json 和音频文件发布到 laravel api 有什么错误吗?

PS:PHP初学者

标签: php

解决方案


您不能在 JSON 中发布文件!。

发布文件需要一个普通的 POST 请求(从<form>元素生成的请求)。

如果您必须使用 JSON 发送文件,请对其进行 base64_encode 并发送。但另一方面,服务器需要先对其进行 base64_decode。


推荐阅读