You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel本地存储用户视频无法在视图页播放问题求助

Laravel 本地存储视频无法播放的问题排查与修复

核心问题分析

注册流程能正常保存视频,但前端无法播放,主要是存储路径与前端访问路径不匹配,同时代码存在几处逻辑漏洞需要修正。

具体修复步骤

1. 打通存储目录与前端访问路径

Laravel 默认local磁盘存在storage/app/目录,而url('storage/xxx')指向的是public/storage/,两者默认无关联,需要做以下操作:

  • 生成符号链接:终端执行命令,把存储目录软链到公共访问目录
    php artisan storage:link
    
  • 切换到public磁盘存储:把视频存到public磁盘(对应storage/app/public/),这样前端才能通过链接访问
    // 替换原local磁盘为public
    $path = Storage::disk('public')
        ->putFileAs("user/video-{$sub}", $request->video, $request->video->getClientOriginalName());
    

2. 修复变量作用域问题

原代码中$path仅在if块内定义,极端情况会导致数据库存空值,提前初始化变量:

$path = null;
if ($request->hasFile('video')) {
    $sub = str_replace('" "', '_', $request->company);
    $path = Storage::disk('public')
        ->putFileAs("user/video-{$sub}", $request->video, $request->video->getClientOriginalName());
}

3. 完善视频验证规则

原验证仅要求必填,未限制格式和大小,可能导致上传浏览器不支持的视频:

'video' => 'required|file|mimes:mp4,ogg|max:20480', // 限制为MP4/OGG格式,最大20MB

4. 用内置方法生成正确访问URL

视图中不要手动拼接URL,改用Storage::url()自动适配磁盘配置:

<video width="auto" height="auto" controls>   
    <source src="{{ Storage::url($user->video) }}" type="video/mp4">   
    <source src="{{ Storage::url($user->video) }}" type="video/ogg">   
    Your browser does not support the video tag. 
</video>

5. 检查文件权限

确保Web服务器能读取存储目录:

chmod -R 755 storage/ public/storage

验证方法

  1. 重新注册上传视频,查看storage/app/public/user/video-xxx/下是否有文件
  2. 复制视图中视频标签的src地址到浏览器,直接访问看能否下载/播放
  3. 如果访问失败,检查符号链接是否生成,或是否用了正确的存储磁盘

内容的提问来源于stack exchange,提问作者developia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:01:13