Я использую Lumen, и у меня есть аудиофайл в папке uploads/videos/
. Я хочу вернуть URL-адрес точного пути (например, app.com/videos/one.mp4
).
Я добился того же очень плохим способом, поместив /{fileName} в маршруты, указав /one.mp4 и удалив расширение из String, как только я получу данные (one.mp4). Это плохой способ, потому что я использую плагин, который принимает только прямые ссылки.
(Например, когда я беру ссылку из любой ссылки mp4 (с расширением), она работает, но когда я пробую ее своим методом, она не работает.
Я нашел этот пример для Laravel, однако Lumen, по-видимому, не принимает ->where
:
Route::get('file/{filename}', 'FileController@getFile')->where('filename', '^[^/]+$');
and
public function getFile($filename)
{
return response()->download(storage_path($filename), null, [], null);
}
Но когда я пробую это в Lumen, я получаю:
Вызов неопределенного метода Laravel\Lumen\Application::where()
Как настроить маршрут, который получает имя файла с расширением в качестве параметров и возвращает файл mp4 в каталоге. Итак, в основном, я хочу нажать на ссылку myapi.com/videos/two.mp4
и воспроизвести two.mp4
, как только я нажму на ссылку.
(Обратите внимание, что я храню имя файла в базе данных без расширения, как two
для two.mp4
.)
Пример формата ссылки: https://v.cdn.vine.co/r/videos/12B2B2092B1284614590713798656_4be40e9deb2.4.1.3029273185552527049.mp4
Обновление:
Этот фрагмент ниже воспроизводит звук в Chrome, но не в приложении, может быть, это из-за самого приложения, а не из-за Lumen? Но он успешно воспроизводит указанную выше ссылку Vine.
$app->get('/player/{filename}', 'PlayerController@show')
public function show ($filename)
{
$this->playVid($filename, 'videos');
}
public function playVid($filename, $showType)
{
if (file_exists("../uploads/" . $showType . "/" . $filename)) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, "../uploads/" . $showType . "/" . $filename);
header("Content-Type: " . $type);
readfile("../uploads/" . $showType . "/" . $filename);
}
}
Если да, то в чем разница между моим файлом и файлом Vine? Когда я открываю оба видео в браузере, щелкаю правой кнопкой мыши и проверяю источник, оба видео имеют type="video/mp4"
Дополнительная информация о вопросе: https://stackoverflow.com/questions/34369823/same-video-from-my-api-url-doesnt-work-where-works-from-online-url-from-proj
Обновление: я понял, что моя проблема была вызвана тем, что я использовал readFile, но я хотел использовать потоковую передачу. Если вы считаете, что это проблема, обратитесь сюда - https://stackoverflow.com/a/34435905/4705339
type="video/mp4"
и оба воспроизводятся в браузере (хромированный ПК). Тем не менее, в демо-приложении для iOS Vine Video работает нормально, тогда как у меня просто черный экран. Никаких ошибок и прочего :/ В чем может быть проблема? Может ли это быть связано с кодеком (или с чем-то еще)? Или я делаю что-то не так, используя такой метод маршрута и контроллера? - person senty   schedule 08.12.2015