Переслать файл из ответа cURL напрямую - PullRequest
0 голосов
/ 14 апреля 2020

Я ищу решение для прямой отправки ответа на мой запрос cURL. У нас есть 2 API: 1 publi c (Laravel 5.8) и 1 private (Java, только локальный доступ). Я делаю некоторую проверку, безопасность и т. Д. c. в публичном c API. Поэтому, когда я получил запрос, после проверки я отправляю запрос в частный API. Частный API создает файл из некоторых файлов и возвращает файл, который соответствует отправленным параметрам. Мне нужно переслать это аудио / видео файлы из частного API. Но на данный момент я храню файл на сервере PHP, прежде чем отправить его в качестве ответа. Я хочу пропустить этот шаг и переслать ответ от моего cURL напрямую. Является ли это возможным? И если да, то как я мог это сделать?

Вот мой код, заранее спасибо.

$ch = curl_init();
// build URL
$url = $this->url.'stream-chunk?stream='.$stream->id_audio_stream_info.'&from='.$from;
$url .= !is_null($to) ? '&to='.$to : '';
$url .= !is_null($bitRate) ? '&bit-rate='.$bitRate : '';
$url .= !is_null($quality) ? '&quality='.$quality : ''; 
$url .= !is_null($format) ? '&format='.$format : ''; 
$url .= !is_null($mode) ? '&mode='.$mode : ''; 
$url .= !is_null($sampleRate) ? '&sample-rate='.$sampleRate : '';

curl_setopt($ch,CURLOPT_URL,$url);
$headers = [
  'Accept: */*',
  'Content-Type: application/json'
];
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

$result = curl_exec($ch);

if ($result ===  FALSE) {
  $e = curl_error($ch);
  Log::error($url);
  Log::error($e);
  $error_code = curl_getinfo($ch , CURLINFO_HTTP_CODE);
  $error_message = $e;
  $response = [
    'msg'=>$error_message
  ];
  $error_code = $error_code == 0 ? 400 : $error_code;
  curl_close($ch);
  return response()->json($response,$error_code);
}

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE );
$info = curl_getinfo($ch);
curl_close($ch);

if ($code === 204) {
  return response()->json(['msg'=>'No Content'],$code);
}

$mime_type = $info['content_type'];
$file_size = $info['size_download'];


$response = response($result,200);
$response->header('Accept','*/*');
$response->header('Content-Type',$mime_type);
$response->header('Content-Length',$file_size);
return $response;

...