Мне нужна помощь в том, как воспроизвести мои загруженные видео в моем проекте Laravel. Я могу загрузить их, и они отображаются в базе данных, но я не могу воспроизвести их в моем представлении, и я получаю эту ошибку: «Не удалось загрузить носитель, либо из-за сбоя сервера или сети, либо из-за того, что формат не поддерживается». Я использую Video.js. Вот мой код
контроллер:
public function store(MovieRequest $request)
{
DB::beginTransaction();
try {
$movie = new Movie;
$movie->movie_name = $request->input('movie_name');
if ($request->hasFile('uploaded_path')) {
$filenameWithExt = $request->file('uploaded_path')->getClientOriginalName();
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
$extension = $request->file('uploaded_path')->getClientOriginalExtension();
$fileNameToStore = $filename. '_'.time().'.'.$extension;
$path = $request->file('uploaded_path')->storeAs('public/movies/', $fileNameToStore);
} else {
$fileNameToStore = 'novideo.mp4';
}
$movie->uploaded_path = $fileNameToStore;
$movie->save();
$movie->actors()->attach($request->input('actor_id'));
$movie->categories()->attach($request->input('category_id'));
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
}
Session::flash('success', 'A movie was successfully UPLOADED in the database!');
return redirect()->route('movies.index');
}
MovieRequest:
public function rules()
{
return [
'movie_name' => 'required|max:255',
'uploaded_path' => 'mimetypes:video/avi,video/mpeg,video/mp4|required',
'category_id' => 'required|exists:mysql.categories,id',
'actor_id' => 'required|exists:mysql.actors,id'
];
}
Посмотреть:
<tbody>
@foreach ($movies as $movie)
<tr>
<td>{{ $movie->id }}</td>
<td>{{ $movie->movie_name }}</td>
<td>
<video id="my-video" class="video-js" controls preload="auto" width="200" height="100" data-setup="{}">
<source src="public/movies/{{$movie->uploaded_path}}" type='video/mp4'>
</video>
</td>
<td>
@foreach ($movie->actors as $actor)
<a href="{{ route('actors.edit', $actor->id) }}">{{$actor->actor_name}} @unless($loop->last)
,
@endunless</a>
@endforeach
</td>
<td>
@foreach ($movie->categories as $category)
<a href="{{ route('categories.edit', $category->id) }}">{{$category->category_name}} @unless($loop->last)
,
@endunless</a>
@endforeach
</td>
<td>{{ date('M j, Y', strtotime($movie->created_at)) }}</td>
<td><a href="{{ route('movies.edit', $movie->id) }}" class="btn btn-default btn-sm">Edit</a></td>
</tr>
@endforeach
</tbody>
Создайте конечную точку для показа вашего фильма:
Route::get('/movie/{id}', ['uses' => 'MovieController@downloadMovie']);
Добавьте метод в свой контроллер:
public function downloadMovie($id)
{
$movie = Movie::findOrFail($id);
// download the movie
return Response::download($movie->uploaded_path);
}
Тогда по вашему мнению:
<video id="my-video" class="video-js" controls preload="auto" width="200" height="100" data-setup="{}">
<source src="/movie/{{$movie->getKey()}}" type='video/mp4'>
</video>
Других решений пока нет …