Angular表单上传文件后PHP端无法获取$_FILES及文件信息如何解决?
问题解决方法
问题根因
你当前将文件转换为base64格式的DataURL,随JSON格式的请求体提交,PHP的$_FILES全局仅支持识别multipart/form-data编码的二进制文件提交,因此无法读取文件信息;同时你未单独提交文件名、大小等元数据,后端也无法直接解析获取。
调整方案
1. 前端Angular代码修改
1.1 调整文件选择逻辑
无需将文件转base64,直接保存原始File对象即可:
// 组件内声明变量存储选中的文件 selectedFile: File = null; cambioFile1(event) { if(event.target.files && event.target.files.length) { // 保存原始文件对象 this.selectedFile = event.target.files[0]; // 可按需在FormGroup中存储文件名用于前端展示/校验 this.formaA.patchValue({ Fichier1: this.selectedFile.name }); } }
1.2 调整请求提交逻辑
使用FormData包装所有表单数据和文件,浏览器会自动使用multipart/form-data编码提交:
// 构建FormData实例 const formData = new FormData(); // 批量插入普通表单字段 Object.keys(this.formaA.value).forEach(key => { formData.append(key, this.formaA.value[key]); }); // 插入上传文件,附带原始文件名 if (this.selectedFile) { formData.append('Fichier1', this.selectedFile, this.selectedFile.name); } // 提交请求,原有回调逻辑保持不变 this.frmOriDir.registrarActuacion(formData) .subscribe( e => { if(e['status'] === 500){ this.toastr.error(e['mensaje'], 'Atención ', { timeOut: 5000, }); this.loading = false; }else if(e['status'] === 200){ this.toastr.success(e['mensaje'], 'Proceso Exitoso ', { timeOut: 5000, enableHtml: true, progressBar:true, closeButton: true, } ); } });
1.3 接口请求逻辑调整
无需手动设置Content-Type请求头,浏览器会自动生成带边界标识的正确编码头:
registrarActuacion(datos){ const url = `UrlExample`; return this.http.post<any>( url, datos); }
2. 后端PHP代码修改
直接通过$_POST读取普通表单字段,$_FILES读取上传文件信息:
// 读取普通表单参数 print_r($_POST); // 读取文件元信息 print_r($_FILES['Fichier1']); // 示例文件处理逻辑 if ($_FILES['Fichier1']['error'] === UPLOAD_ERR_OK) { $fileName = $_FILES['Fichier1']['name']; // 原始文件名 $fileSize = $_FILES['Fichier1']['size']; // 文件大小(字节) $fileTmpPath = $_FILES['Fichier1']['tmp_name']; // 服务端临时文件路径 // 移动文件到自定义存储目录 move_uploaded_file($fileTmpPath, './自定义存储目录/' . $fileName); }
可选兼容方案(不推荐)
如果需要保留原有base64提交逻辑,可在前端提交时额外传递文件名、大小字段,后端接收后解码base64内容生成文件:
- 前端提交时新增字段
Fichier1Name、Fichier1Size,传入对应值 - 后端从
php://input读取base64内容,去掉前缀后用base64_decode()解码写入文件即可
该方案会使传输体积增加约33%,不适合大文件上传场景
内容的提问来源于stack exchange,提问作者andres castellanos
相关产品推荐
相关产品推荐

