Laravel 5.4多图片上传报错:文件因未知错误未上传
问题分析与解决方案
嘿,我一眼就瞅出你代码里的关键问题啦——你在循环里一直用同一个文件对象($file)去处理三个不同的文件名!
你看,$file是第一个上传的image文件,当你第一次调用$file->move()之后,这个临时文件已经被移动到目标文件夹了,后续再用它去移动其他文件名,自然找不到对应的文件,就抛出了那个未知错误。
修正后的代码
我们需要把每个文件对象和它对应的目标文件名配对,然后分别处理:
if ($request->hasFile('image') && $request->hasFile('image_575') && $request->hasFile('image_768')){ // 获取三个文件对象 $file = $request->image; $file_575 = $request->image_575; $file_768 = $request->image_768; // 生成每个文件的目标文件名 $name = time().'-'.$file->getClientOriginalName(); $name_575 = time().'-'.$file_575->getClientOriginalName(); $name_768 = time().'-'.$file_768->getClientOriginalName(); // 把文件对象和对应的文件名配对成数组 $filesToUpload = [ $file => $name, $file_575 => $name_575, $file_768 => $name_768 ]; // 循环处理每个文件 foreach ($filesToUpload as $fileObj => $fileName) { $fileObj->move('uploads/banners/', $fileName); } // 保存Banner模型 $banner = new Banner(); $banner->name = $name; $banner->name_575 = $name_575; $banner->name_768 = $name_768; $banner->side_color = $request->side_color; $banner->type = $request->type; $banner->save(); }
额外排查点(如果修正后仍报错)
虽然核心问题是代码逻辑错误,但如果还是有问题,可以检查这几点:
- 确认
uploads/banners/文件夹的权限是否正确(不过第一个文件能上传,权限大概率没问题) - 检查
php.ini里的upload_max_filesize和post_max_size是否足够容纳三个文件的总大小 - 确保上传的文件没有被服务器安全模块(比如ModSecurity)拦截
内容的提问来源于stack exchange,提问作者Nipun Tharuksha
相关产品推荐
相关产品推荐

