Laravel & Inertia视频文件上传失败问题排查求助
问题修复方案
1. 修正未定义模型实例的致命错误
你的store方法中直接调用$slider->update(...),但$slider变量从未被实例化,这会抛出Undefined variable $slider的致命错误,直接中断上传与保存流程。
- 如果是创建新的滑块记录,修改为创建模型实例:
// 确保顶部引入Slider模型 use App\Models\Slider; // ...文件存储逻辑后 Slider::create([ 'media_path' => $media_path, "title" => $request->title, "description" => $request->description, "published" => $request->published ?? false, // 为布尔字段设置默认值 "format" => $request->format, "video_thumbnail" => $video_thumbnail, ]);
- 如果是更新现有滑块,需要通过路由参数注入模型实例,方法定义改为:
public function update(Request $request, Slider $slider) { // ...验证与文件存储逻辑 $slider->update([...]); }
2. 调整验证规则的文件大小限制
验证规则中max:3024限制文件最大为3024KB(约3MB),远小于你php.ini设置的30M,会直接拦截超过3MB的视频文件。修改为对应30MB的数值:
'media_path' => "required|mimes:jpg,jpeg,png,mp4|max:30720", 'video_thumbnail' => "nullable|mimes:jpg,jpeg,png|max:30720",
3. 检查存储目录权限
确保视频存储目录storage/app/public/sliders/images的权限正确,让Apache用户(通常为www-data)拥有读写权限:
chown -R www-data:www-data storage/app/public/sliders chmod -R 755 storage/app/public/sliders
4. 确认存储符号链接有效性
如果使用public磁盘存储,需要确保已创建public目录的符号链接,否则文件无法通过外部访问,也可能导致存储失败:
php artisan storage:link
5. 排查MIME类型匹配问题
部分服务器对MP4文件的MIME类型识别存在差异,可在验证规则中补充明确的MIME类型:
'media_path' => "required|mimes:jpg,jpeg,png,mp4,video/mp4|max:30720",
6. 查看Laravel日志定位细节错误
如果以上方法仍未解决问题,查看storage/logs/laravel.log文件,里面会记录具体的错误信息(如磁盘空间不足、文件写入失败等),帮助精准定位问题。
内容的提问来源于stack exchange,提问作者Leslie Joe
相关产品推荐
相关产品推荐

