Как загрузить видеофайл с удаленного сервера в laravel?

#php #laravel #file #video #download

Вопрос:

У меня есть 3 сервера: 1 для api, 1 для контента, 1 для интерфейса. Я хочу загрузить видеофайл mp4, когда я нажимаю на интерфейс. Основной поток — кнопка интерфейса нажмите, чтобы загрузить, затем вызовите api и в api загрузите файл. Вот то, что я уже пробовал-

Внешний интерфейс

 <a role="button" class="btn btn-hover iq-button iq-btn-sm"  download href="{{config('app.base_api_url').'/downloadAFile?url='.getsinglecontentvideobaseurl().$video->filename.'.'.$video->filetype.'amp;filetype=video/'.$video->filetype.'amp;filename='.$video->filename.'.'.$video->filetype.'"'}}">
    Download
</a>
 

API

 public function downloadAFile(Request $request)
{
    $url = $request->url ?? '';
    $filename = $request->filename ?? 'download.mp4';
    $filetype = $request->filetype ?? 'video/mp4';

    $file = $url;
    $headers = array('Content-Type: '.$filetype);
    return Response::download($file, $filename, $headers);  
}
 

Когда я нажимаю «Загрузить», появляется эта ошибка-

 SymfonyComponentHttpFoundationFileExceptionFileNotFoundException
 

Комментарии:

1. «Вот то, что я уже пробовал» — и? Что случилось? Какая проблема все еще нуждается в решении?

Ответ №1:

Этот код api работает только $url является внешним онлайн-сервером. Иначе это не сработает. Имя файла не может содержать пробел epmpty.
     public function downloadAFile(Request $request)
    {
        ini_set('max_execution_time', 600);

        $url = $request->url ?? '';
        $filename = $request->filename ?? 'download.mp4';

        $tempImage = tempnam(sys_get_temp_dir(), $filename);
        copy($url, $tempImage);

        return response()->download($tempImage, $filename);
    }