Laravel 8批量插入数据时图片上传报错解决方案咨询
解决Laravel 8批量插入时的图片上传报错问题
报错Call to a member function getClientOriginalExtension() on array的原因很明确:你的表单里param_img[]是数组格式,而你在循环中直接用$request->file('param_img')拿到的是所有上传文件的数组,不是当前循环项对应的单个文件,所以无法调用文件对象的方法。
同时原代码里还有一个逻辑错误:你把文件名赋值给了$portfolio->param_img,但实际上应该赋值给当前创建的$data(PortfolioParam实例),否则无法将图片路径保存到对应的关联数据中。
修正后的控制器代码如下:
foreach($request->param_img as $key => $param_img){ $data = new PortfolioParam; $data->param_desc = $request->param_desc[$key]; // 检查当前循环项对应的文件是否存在 if($request->hasFile("param_img.$key")){ // 获取当前循环项的单个文件 $file = $request->file("param_img.$key"); $extension = $file->getClientOriginalExtension(); $filename = time() . '_' . $key . '.' . $extension; // 加上key避免文件名重复 $file->move('upload/portfolio_param/', $filename); $data->param_img = $filename; // 赋值给当前PortfolioParam实例 } $data->portfolio_id = $portfolio->id; $data->save(); }
关键修改点:
- 用
$request->hasFile("param_img.$key")判断当前循环项是否有上传文件 - 用
$request->file("param_img.$key")获取单个文件对象,而不是整个数组 - 修正赋值对象:将
$portfolio->param_img改为$data->param_img,确保图片路径保存到正确的模型实例中 - 文件名加上
$key,避免同一时间上传多个文件时文件名重复覆盖
内容的提问来源于stack exchange,提问作者MD. RONY AHMED
相关产品推荐
相关产品推荐

