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

Laravel使用intervention/image处理预览图后如何获取路径存入数据库

报错原因

你触发报错的根本原因是$img->save($path)返回的是Intervention Image实例对象,而非路径字符串。你直接将对象赋值给Eloquent模型字段,模型后续序列化转JSON时就会抛出UTF-8编码异常。

解决方法

你模型中定义的预览图访问器逻辑要求存储的是Storage磁盘对应的相对路径,和主图存储规则保持一致即可,修正后的控制器代码如下:

if ($request->hasFile('preview_image')) {
   $file = $request->file('preview_image');
   $namewithextension = $file->getClientOriginalName();
   $name = explode('.', $namewithextension)[0];
   $extension = $file->getClientOriginalExtension();
   $uploadname = $name. '-' .DateTime::createFromFormat('U.u', microtime(TRUE))->format('U-u') . '.' .$extension;
   // 定义和主图规则对齐的相对存储路径
   $relativePath = 'public/article-block-image/preview/' . $uploadname;
   // 拼接完整本地路径用于保存处理后的图片
   $fullSavePath = public_path('storage/article-block-image/preview/'. $uploadname);
   // 处理并保存图片
   Image::make($file)->resize(240, 120)->save($fullSavePath);
   // 给模型字段赋值相对路径
   $article_block_image->preview_image = $relativePath;
}

逻辑说明

  • 该写法和主图的存储规则完全对齐,存入数据库的是public/xxx格式的相对路径,完全适配你已经写好的getPreviewImageAttribute访问器逻辑,不需要修改模型层代码即可正常获取预览图URL。
  • 不要尝试直接将save()方法的返回值赋值给模型字段,该方法返回Image实例用于链式调用,本身不是路径字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:45:05