为什么AngularJS $http.post提交文件时PHP端接收不到任何数据
你遇到的问题由三处错误共同导致,对应修改方案如下:
错误1:AngularJS $http.post 参数结构错误
$http.post的参数顺序为请求地址 > 请求体数据 > 全局配置项,你之前把headers配置错误写到了请求体参数中,同时缺少配置阻止AngularJS自动序列化FormData对象。
修改后的myPostr工厂代码:
application.factory('myPostr', function($http){ return function (data, callback) { $http.post('api/', data, { headers: {'Content-Type': undefined}, transformRequest: angular.identity }).then(function(res){ callback(res.data); }) } });
错误2:前后端文件字段名不匹配
你在FormData中append的文件字段名为form,但PHP中尝试读取$_FILES['file'],字段名不对应导致读取失败,二选一修改即可:
- 前端调整append字段名:
form.append('file', element[0].files[0]) - 后端调整读取字段:
isset($_FILES['form'])
错误3:PHP端数据解析逻辑错误
文件上传使用的multipart/form-data请求格式不是JSON,用json_decode解析php://input必然返回空。PHP会自动解析该格式的请求到$_FILES和$_POST全局变量,不需要手动读取输入流。
修改后的PHP测试代码:
header('Content-Type: application/json'); echo json_encode($_FILES);
附加排查项
如果修改后仍无法正常接收,检查以下配置:
- php.ini中
upload_max_filesize、post_max_size配置值大于上传文件大小 - PHP对临时文件目录、上传目标目录拥有读写权限
内容的提问来源于stack exchange,提问作者Vlad Buștiuc
相关产品推荐
相关产品推荐

