将视频文件返回到 laravel 5.4 上的视图
Returning Video file to a view on laravel 5.4
我在 Laravel 5.4 中将视频渲染到我的视图时遇到问题。
我的看法如下:
<main class="video-player">
@if(!empty($video))
<video id="my-video" class="video-js vjs-big-play-centered" controls data-setup="{}">
<source src="{{url('video/'.$token.'/'.$video)}}" type="{{$video_mime_type}}">
<p class="vjs-no-js">
Please upgrade your browser.
</p>
</video>
@else
<div class="alert alert-info"><span class='fa fa-info-circle'></span> Lesson video is unavailable!!! </div>
@endif
</main>
获取视频内容的路径如下:
Route::get('video/{token}/{video}','ResourceController@show_video');
而ResourceControllerclass如下图:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Storage;
use Response;
use File;
use GuzzleHttp\Mimetypes;
use App\Mime;
class ResourceController extends Controller
{
public function __construct()
{
$this->middleware('auth')->only('show_video');
}
........
........
public function show_video($token,$filename)
{
$token=\App\VideoPermission::where('token',$token)->first();
if(!empty($token))
{
$token->delete();
$mime_type=Mime::from_extension($filename);
return response()->file(storage_path('app/lesson-files/'.$filename),[
'Content-Type' => $mime_type,
'Content-Disposition' => 'inline; filename="Lesson-file"'
]);
}
return false;
}
}
当我在笔记本电脑浏览器上播放时,效果如预期,但当我尝试在移动 phone 浏览器(两种情况下使用相同的 Chrome 浏览器)上播放同一视频时,它引发以下异常:
UnexpectedValueException: The Response content must be a string or object implementing __toString(), "boolean" given. in /home/username/domainname.com/vendor/symfony/http-foundation/Response.php:409
谁能帮我找出问题的根源。
谢谢
我后来发现问题是 return 文件内容的方法中的 'if' 条件造成的。因此,当由于任何原因不满足条件时,它 returns 'false' 作为响应而不是视频文件,因此导致我收到布尔响应。
当缺少所需的令牌时,代码就是这样编写的,如下所示
if(!empty($token))
{
$token->delete();
$mime_type=Mime::from_extension($filename);
return response()->file(storage_path('app/lesson-files/'.$filename),[
'Content-Type' => $mime_type,
'Content-Disposition' => 'inline; filename="Lesson-file"'
]);
}
return false;
}
我后来发现,当用户尝试使用不满足 return 视频内容预期条件之一的过时浏览器访问应用程序时,就会发生这种情况。
换句话说,系统实际上按预期工作。
感谢所有以某种方式提供帮助的人。谢谢大家。
我在 Laravel 5.4 中将视频渲染到我的视图时遇到问题。
我的看法如下:
<main class="video-player">
@if(!empty($video))
<video id="my-video" class="video-js vjs-big-play-centered" controls data-setup="{}">
<source src="{{url('video/'.$token.'/'.$video)}}" type="{{$video_mime_type}}">
<p class="vjs-no-js">
Please upgrade your browser.
</p>
</video>
@else
<div class="alert alert-info"><span class='fa fa-info-circle'></span> Lesson video is unavailable!!! </div>
@endif
</main>
获取视频内容的路径如下:
Route::get('video/{token}/{video}','ResourceController@show_video');
而ResourceControllerclass如下图:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Storage;
use Response;
use File;
use GuzzleHttp\Mimetypes;
use App\Mime;
class ResourceController extends Controller
{
public function __construct()
{
$this->middleware('auth')->only('show_video');
}
........
........
public function show_video($token,$filename)
{
$token=\App\VideoPermission::where('token',$token)->first();
if(!empty($token))
{
$token->delete();
$mime_type=Mime::from_extension($filename);
return response()->file(storage_path('app/lesson-files/'.$filename),[
'Content-Type' => $mime_type,
'Content-Disposition' => 'inline; filename="Lesson-file"'
]);
}
return false;
}
}
当我在笔记本电脑浏览器上播放时,效果如预期,但当我尝试在移动 phone 浏览器(两种情况下使用相同的 Chrome 浏览器)上播放同一视频时,它引发以下异常:
UnexpectedValueException: The Response content must be a string or object implementing __toString(), "boolean" given. in /home/username/domainname.com/vendor/symfony/http-foundation/Response.php:409
谁能帮我找出问题的根源。 谢谢
我后来发现问题是 return 文件内容的方法中的 'if' 条件造成的。因此,当由于任何原因不满足条件时,它 returns 'false' 作为响应而不是视频文件,因此导致我收到布尔响应。
当缺少所需的令牌时,代码就是这样编写的,如下所示
if(!empty($token))
{
$token->delete();
$mime_type=Mime::from_extension($filename);
return response()->file(storage_path('app/lesson-files/'.$filename),[
'Content-Type' => $mime_type,
'Content-Disposition' => 'inline; filename="Lesson-file"'
]);
}
return false;
}
我后来发现,当用户尝试使用不满足 return 视频内容预期条件之一的过时浏览器访问应用程序时,就会发生这种情况。
换句话说,系统实际上按预期工作。
感谢所有以某种方式提供帮助的人。谢谢大家。