如何提取AJAX POST提交至PHP服务器的图片($_POST形式)
解决AJAX上传图片后PHP无法通过$_FILES获取的问题
嘿,我一眼就揪出问题所在啦!你的JavaScript代码里有个拼写错误,导致请求头没正确设置,才会让PHP把上传的图片二进制内容拆到$_POST数组里,而不是正常放到$_FILES中。
错误根源
你写的contetType: false少了一个字母'n',正确的参数名是contentType。这个参数设为false的作用是告诉jQuery不要自动添加Content-Type请求头,让浏览器自动生成带分隔符(boundary)的multipart/form-data头——这是文件上传必须的请求格式,只有这样PHP才能正确识别并解析上传的文件,将其存入$_FILES数组。
修正后的JavaScript代码
function uploadFile(field) { let file = field.files[0] let formData = new FormData() formData.append("mobileImage", file) $.ajax({ url: 'upload-mobile.php', type: 'post', data: formData, contentType: false, // 这里修正了拼写错误 processData: false }) .done(function(data) { console.log(data) }) }
PHP端正确获取文件的方式
修正JS代码后,你就能回到熟悉的$_FILES数组提取图片了。下面是upload-mobile.php的示例代码:
<?php // 检查是否有文件上传且无错误 if(isset($_FILES['mobileImage']) && $_FILES['mobileImage']['error'] === UPLOAD_ERR_OK) { $uploadDir = './uploads/'; // 确保这个目录存在且有写入权限 $fileName = uniqid() . '_' . $_FILES['mobileImage']['name']; $uploadPath = $uploadDir . $fileName; // 将临时文件移动到目标目录 if(move_uploaded_file($_FILES['mobileImage']['tmp_name'], $uploadPath)) { echo "文件上传成功!路径:" . $uploadPath; } else { echo "文件移动失败,请检查目录权限"; } } else { echo "文件上传失败,错误码:" . ($_FILES['mobileImage']['error'] ?? '未知'); } ?>
补充说明
之前你在$_POST里看到分割后的二进制内容,是因为错误的contetType参数让jQuery默认设置了普通的application/x-www-form-urlencoded请求头,PHP无法解析multipart/form-data格式的请求体,就把整个请求内容拆成了$_POST的键值对,自然就出现了乱码的二进制片段。
内容的提问来源于stack exchange,提问作者Toma Tomov
相关产品推荐
相关产品推荐

