我需要有关如何在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>
答案 0 :(得分:0)
创建一个端点来投放电影:
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>