Laravel 7中如何通过多个文件输入框实现多文件批量上传?
错误原因
你当前往$files数组中存入的是自定义的文件名字符串,而非$request获取到的上传文件实例对象,字符串类型无法调用move()方法,因此触发报错。
正确实现代码
可以先配置上传字段和对应存储文件名的映射,再遍历处理所有上传文件:
// 配置所有需要处理的文件字段和对应存储文件名的映射 $fileFields = [ 'resume' => $resumeFilename, 'profile_photo' => $imagefilename, 'id_proof' => $id_proof, 'prevEmpType' => $prevEmpType, 'offer_letter' => $offer_letter, 'con_a_agree' => $con_a_agree ]; // 定义存储目录的绝对路径,避免相对路径定位错误 $uploadPath = public_path('uploads/'); // 提前判断目录是否存在,不存在则自动创建 if (!file_exists($uploadPath)) { mkdir($uploadPath, 0755, true); } foreach ($fileFields as $fieldName => $saveFileName) { if ($request->hasFile($fieldName)) { // 从请求中获取上传文件实例 $uploadedFile = $request->file($fieldName); // 执行文件移动,第一个参数为存储目录,第二个参数为自定义的保存文件名 $uploadedFile->move($uploadPath, $saveFileName); } }
额外注意事项
- 前端表单必须添加
enctype="multipart/form-data"属性,且每个file输入框的name属性和上面$fileFields的键名完全对应,否则无法正常获取上传文件 - 需要给
uploads目录设置正确的写入权限,Linux环境下通常设置为755或775权限即可 - 建议额外添加上传文件的类型、大小校验规则,避免非法文件上传带来的安全风险
内容的提问来源于stack exchange,提问作者Nikhil Dange
相关产品推荐
相关产品推荐

