Загрузка файла с помощью CURL и извлечение методом Laravel - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь разместить данные, используя cURL в моей конечной точке, которая построена на Laravel. В моем контроллере API, где я получаю данные, я могу получить все данные, кроме моего медиа-файла. Я проверяю наличие файла, используя $request->hasFile('file'), но он возвращает false. Я также пытаюсь получить файл, используя $request->file('file'), но он возвращает ноль.

Когда я использую $request->get('file'), я получаю следующий ответ.

Файл ": {" имя ":" / Users / имя / файла / путь / государственные / СМИ / aaaah.wav», "мим": нулевой, "postname": нулевая}

Ниже я использую $headers[] = "Content-Type: application/json"; для преобразования получателя из массива в строку. Может ли кто-нибудь помочь мне понять, почему файл, опубликованный cURL, не получен в моем методе Laravel, когда я использую $request->hasFile('file') и $request->file('file')?

AppController

public function postCurlData()
{
   $endPoint = 'http://127.0.0.1:9000/api';          
   $apiKey = '****';
   $url = $endPoint . '?key=' . $apiKey;
   $dir = '/Users/name/File/path/app/public/media/test.wav'; // full directory of the file
   $curlFile = curl_file_create($dir);

    $data = [
       'recipient' => ['44909090', '44909090'],
       'content' => 'i love to code',
       '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);
    curl_close($ch);
}

Моя конечная точка, где я получаю данные:

APIController

public function receiveCurlData()   
{   
    $apiKey = $request->get('key');
    if (($apiKey)) {
        return response()->json([
            'status' => 'success',
            'content' => $request->get('content'),
            'recipient' => $request->get('recipient'),
            'file' => $request->hasFile('file')                 
        ]);
    }
}

Ответ

{"status":"success","content":"I love to code","recipient":
["44909090","44909090"],"file":false}

1 Ответ

0 голосов
/ 15 января 2019

Этот ответ связан с вашим вопросом: как загрузить файл, используя curl с php .

Вы должны удалить

 $headers = array();
    $headers[] = "Content-Type: application/json";

И

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

А также удалите json_encode (), заменив его простым массивом

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($ch);
    $result = json_decode($result, TRUE);
    curl_close($ch);
...