Laravel多图上传时如何为不同图片生成独立存储名称?
问题原因
- 前端表单配置错误:多图上传时,文件上传控件的
name属性需要设置为数组格式file[],同时添加multiple属性,否则后端只能接收到单个文件 - 文件名重复:你使用
time()作为文件名前缀,同一秒内上传的所有图片生成的文件名完全相同,后续上传的图片会直接覆盖之前的文件 - 后端无批量处理逻辑:现有代码仅处理单个文件,没有遍历所有上传的图片,因此只会生成1条数据库记录
修复方案
1. 前端调整
文件上传控件修改为如下格式:
<input type="file" name="file[]" multiple accept="image/*">
2. 后端控制器代码修改
public function store(Product $product, Request $request) { $galleries = []; // 判断是否有上传的文件数组 if ($request->hasFile('file')) { // 遍历所有上传的图片 foreach ($request->file('file') as $file) { // 生成唯一文件名,避免重复 $name = uniqid() . '_' . time(); $extension = $file->getClientOriginalExtension(); $fileName = $name . '.' . $extension; $path = $file->storeAs($this->path, $fileName, 'public'); // 逐条写入数据库 $galleries[] = Gallery::create([ 'product_id' => $product->id, 'image' => $path, ]); } } return response()->json($galleries); }
说明:
uniqid()会生成基于微秒级时间戳的唯一字符串,配合time()可以彻底避免文件名重复的问题。
内容的提问来源于stack exchange,提问作者user16277300
相关产品推荐
相关产品推荐

