使用Maatwebsite包上传Excel导入数据提示File not found at path: file.xlsx
错误原因
- 核心原因1:前端表单未配置
enctype="multipart/form-data"属性,上传文件必须携带该属性,否则后端无法正确接收上传的文件流,导致$request->file读取到的是文件名字符串而非上传文件实例,Maatwebsite找不到对应路径的文件就会抛出该错误。 - 原因2:控制器中直接读取
$request->file,未做文件存在性和格式校验,若文件上传失败时直接传入参数会触发路径不存在错误。 - 其他可能原因:php.ini配置未开启文件上传、上传文件大小超出配置限制、storage目录无读写权限。
修复方案
1. 修改前端Blade表单
给form标签添加enctype="multipart/form-data"属性,修改后代码如下:
<form action="{{ route('addcutsom.execution') }}" method="POST" enctype="multipart/form-data"> @csrf <label class="control-label">Upload File:</label> <input class="form-control" name="file" type="file" required> <button class="btn btn-primary" type="submit">ثبت</button> </form>
2. 修改控制器逻辑,增加文件校验
先验证文件是否上传成功、格式是否合法,再获取文件实例传入Excel::import方法,修改后代码如下:
public function executeImport(Request $request) { // 校验文件是否上传且为合法格式 $request->validate([ 'file' => 'required|file|mimes:xls,xlsx,csv' ]); Excel::import(new CustomExamImport, $request->file('file')); return "Records are imported"; }
3. 可选环境校验(如果上述修改后仍报错)
- 检查
php.ini配置:确认file_uploads = On,upload_max_filesize和post_max_size数值大于上传的Excel文件大小 - 检查Laravel项目
storage目录权限,确保运行PHP的用户对该目录有读写权限
额外提示:你当前的CustomExamImport类中查询了$user_id但未赋值到OlympiadExamExecution的字段中,若业务需要关联用户可补充对应字段的赋值逻辑
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

