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

Laravel文章上传图片时数据库存临时路径问题求助

解决文章发布中图片存储原始文件名的问题

你的代码核心问题是没有把获取到的原始文件名赋值给要存入数据库的字段,同时当前图片移动逻辑用的是自定义时间戳文件名,导致数据库存的还是表单提交的临时路径。以下是修正后的代码和说明:

关键修改点

  • 调用getClientOriginalName()获取原始文件名后,将其赋值给$incomingFields['image'],替换掉原来的临时路径值
  • 若担心文件重名覆盖,可在原始文件名前拼接时间戳(可选,按需选择)
  • 移动文件时使用最终要存储的文件名(原始名或处理后的文件名)

修正后的完整代码

// Post控制器代码
$incomingFields = $request->validate([
    'title' => 'required',
    'body' => 'required',
    'image' => ''
]);

$incomingFields['title'] = strip_tags($incomingFields['title']);
$incomingFields['body'] = strip_tags($incomingFields['body']);
$incomingFields['user_id'] = auth()->id();

// 获取原始文件名
$originalImageName = $request->file('image')->getClientOriginalName();

// 可选:若担心重名,给原始文件名加时间戳前缀
// $originalImageName = time() . '_' . $request->file('image')->getClientOriginalName();

// 将原始文件名赋值给要存入数据库的字段
$incomingFields['image'] = $originalImageName;

// 移动文件到指定目录,使用原始文件名
$request->image->move(public_path('images'), $originalImageName);

POST::create($incomingFields);
return redirect('/');

额外说明

  • 移除了无用的strip_tags($incomingFields['image']),文件上传的临时路径无需转义,且后续会被原始文件名覆盖
  • 选择保留时间戳前缀的话,既能保留原始文件名辨识度,又能避免同文件名文件被覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:17:45