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

Laravel中storage目录视频无法在Blade播放如何解决

Laravel Storage 存储视频在Blade中无法播放排查方案

按以下顺序逐一排查即可解决90%以上的同类问题:

  • 首先确认软链是否生成
    Laravel默认禁止web直接访问storage目录下的文件,public目录下的storage路径本质是指向storage/app/public的软连接,未生成软链时哪怕路径拼写完全正确,也会返回404无法加载文件。
    直接在项目根目录执行命令生成软链:
php artisan storage:link

注意:如果你的视频文件是上传到storage/app目录而非storage/app/public目录,软链默认无法访问到文件,要么将视频文件迁移到storage/app/public下的对应目录,要么手动为存储视频的目录创建指向public目录的软链。

  • 核对路径拼接是否重复
    先打开浏览器开发者工具的「网络」面板,找到视频资源的请求,查看状态码:

    • 如果状态码为404:先检查数据库中存储的vid_path字段值,如果字段本身已经带了storage/前缀,模板中再次拼接storage/就会出现路径重复。你可以直接在模板中临时打印生成的路径,和服务器实际文件路径做比对,去掉重复的前缀即可。
    • 软链生成后可以直接进入项目public目录,查看是否存在storage快捷方式/软链文件夹,点进该文件夹确认是否能看到videos目录及对应的目标视频文件。
  • 检查文件权限与文件完整性
    如果视频请求返回200状态码但依旧无法播放:

    1. 给storage目录开放正确的读权限,Linux环境下执行以下命令:
    chmod -R 755 storage
    chown -R www-data:www-data storage
    
    1. 找到服务器上存储的原视频文件,直接拖到本地浏览器中播放,确认文件没有在上传过程中损坏、编码格式为浏览器支持的H.264编码MP4格式。
  • 优化模板代码
    你当前代码中硬编码的ogg源路径movie.ogg不存在时会额外产生无意义的404请求,不需要可以直接删除,优化后的代码参考:

@php
    $video = \App\Video::where('vid_id', $vid_id)->first();
    // 自动适配路径,避免重复拼接storage前缀
    $videoUrl = str_starts_with($video->vid_path, 'storage/') 
        ? asset($video->vid_path) 
        : asset('storage/' . $video->vid_path);
@endphp
<video controls preload="metadata" style="width: 100%;">
   <source src="{{ $videoUrl }}" type="video/mp4">
   您的浏览器不支持HTML5视频标签,请升级浏览器后重试。
</video>

如果你使用Laravel内置的public文件系统驱动存储视频,更推荐直接调用Storage::disk('public')->url($video->vid_path)生成访问地址,不需要手动拼接路径,能避免绝大多数路径拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:01:08