Laravel Media Library中file_description字段重复存储相同值问题
问题解决:批量上传文件后file_description字段值重复
问题出在循环处理文件时,你错误地重复调用了addMediaFromRequest('scan_copy1')——这个方法每次都会从请求中获取scan_copy1数组的第一个文件,导致所有媒体记录复用相同的元数据,最终出现file_description字段值完全一致的情况。
修正后的代码如下:
//Save the added array of supporting scanned documents, if available// if($request->hasfile('scan_copy1')) { $x = 0; foreach($request->file('scan_copy1') as $copy1) { $x=$x+1; $name=$copy1->getClientOriginalName(); list($nName,$nExt) = explode('.',$name); $scanCopy1 = Auth::user()->id.'_'.microtime(true) . '_' . str_replace(' ', '_', $name); // 改用addMedia传入当前循环的文件实例$copy1,而非重复从request获取 $client->addMedia($copy1) ->withCustomProperties(['mime-type' => 'image/jpeg']) ->preservingOriginal() ->usingName($nName) ->usingFileName($scanCopy1) ->toMediaCollection(User::$media_collection_main_scan.$x); } }
额外补充两点优化建议:
- 如果需要给每个文件设置不同的
file_description,可以在循环中从请求中获取对应位置的描述参数(比如$request->input('scan_copy_desc')[$x-1]),再通过->withCustomProperties(['file_description' => $desc])绑定到媒体记录中。 - 原代码里的
time()在循环中会生成相同的时间戳,改用microtime(true)可以避免文件名重复冲突。
内容的提问来源于stack exchange,提问作者Oladeji
相关产品推荐
相关产品推荐

