首页 > 解决方案 > 无法提交语音文件 - PHP & Laravel

问题描述

我正在尝试通过从我的申请表发布到我的 API 来在我的申请中提交语音文件。检查我的代码中的数据,我看到除了我的文件之外的所有数据都已提交。但是,我无法说出为什么文件不会被提交。我enctype='multipart/form-data'在我的代码中加入了修复程序,但这不起作用。

关于为什么我的文件没有被发布但返回false的任何想法?

API

           public function API()
           { 
           $codeAPI = $request->get('key');
            if (empty($codeAPI)) {
            return response()->json([
                    'status' => 'error',
                    'message' => 'code is not specified',
                    'receipient' => $recipients,                    
                    'file' => $request->hasFile('file');            
            ]);
            }

控制器

public function testAPI()
{
    $endPoint = 'http://127.0.0.1:9000/api/';
    $codeKey= '';
    $url = $endPoint . '?key=' . $apiKey;
    $curlFile = $request->get('file');

        $data = [
           'recipient' => ['9901231001', '1239131001'],
           'content' => 'Learning API'
           'file' => $curlFile,
        ];

        $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,  json_encode($data));
        $result = curl_exec($ch);
        $result = json_decode($result, TRUE);
        return $result;
        curl_close($ch);
}

HTML

  <form class="form" method="POST" action="/test/api" >
    {!! csrf_field() !!}
  <div class="form-body">
  <div class="form-group">
  <label for="eventRegInput2">File</label>
  <input type="file" name="file" id="placeholder">
  </div>                               
  <div class="form-actions right">
  <button type="submit" class="btn btn-primary square btn-min-width mr-1 mb-1" >Submit</button>
 </button>
 </div>
 </div>
</form>

结果

   {"status":"error","message":"code key is not 
    specified","receipient":["9901231001","1239131001"],
"content":{Learning API},"file":false}

标签: phplaravel

解决方案


您需要使用$request->file('file')而不是$request->get('file')获取文件输入。并确保您enctype='multipart/form-data'在表单中添加。

   public function testAPI()
    {
        $endPoint = 'http://127.0.0.1:9000/api/';
        $codeKey= '';
        $url = $endPoint . '?key=' . $apiKey;
        $curlFile = $request->file('file');

            $data = [
               'recipient' => ['9901231001', '1239131001'],
               'content' => 'Learning API'
               'file' => $curlFile,
            ];

            $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,  json_encode($data));
            $result = curl_exec($ch);
            $result = json_decode($result, TRUE);
            return $result;
            curl_close($ch);
    }

推荐阅读