如何在Laravel中使用Laravel Excel导入多个Excel文件
Laravel Excel多文件导入修复方案
核心问题出在前端文件字段命名不符合PHP多文件上传规范,按以下步骤修改即可正常运行:
1. 修改前端表单文件字段
多文件上传场景下,file类型input的name属性必须加[]后缀,否则服务端只会解析第一个上传的文件,无法生成文件数组。
把表单里的input行从:
<input type="file" name="file" class="custom-file-input" id="customFile" multiple>
修改为:
<input type="file" name="file[]" class="custom-file-input" id="customFile" multiple>
完整修正后的表单代码:
<form action="{{ route('file-import') }}" method="POST" enctype="multipart/form-data"> @csrf <div class="form-group mb-4" style="max-width: 500px; margin: 0 auto;"> <div class="custom-file text-left"> <input type="file" name="file[]" class="custom-file-input" id="customFile" multiple> <label class="custom-file-label" for="customFile">Choose file</label> </div> </div> <button class="btn btn-primary">Import data</button> </form>
2. 控制器端增加校验逻辑
不要直接遍历请求里的file字段,先做参数校验,避免非法上传、空文件导致的程序报错:
public function fileImport(Request $request) { // 校验上传参数:必须传文件数组,每个文件格式为xlsx/xls/csv $request->validate([ 'file' => 'required|array', 'file.*' => 'required|file|mimes:xlsx,xls,csv', ]); foreach($request->file('file') as $uploadedFile){ // 逐文件执行导入,store方法会自动生成唯一文件名存到storage/app/temp目录,提前确保该目录有写入权限 Excel::import(new LogsImport, $uploadedFile->store('temp')); } return back()->with('status', '文件全部导入完成'); }
调试技巧
不要直接打印整个$request对象,里面嵌套了路由、容器、配置等大量冗余信息,要查看上传文件只需要调用$request->allFiles(),就能清晰看到所有上传的文件结构。
如果修改后依然无法获取文件,检查php.ini配置:
post_max_size要大于单次上传所有文件的总大小upload_max_filesize要大于单个文件的最大体积- 确保表单没有遗漏
enctype="multipart/form-data"属性(你现有代码里已经加了,这点没问题)
内容的提问来源于stack exchange,提问作者Alexandru Tugui
相关产品推荐
相关产品推荐

