FormData上传文件时后端收不到file字段怎么办?
我用FormData上传图片,前端明明append了file,但后端PHP一直拿不到$_FILES里的数据,试了好多次都不行。
我检查了请求头Content-Type是multipart/form-data,也确认了input的type是file,还用了new FormData(),但就是传不过去。是不是哪里漏了?
const fileInput = document.querySelector('#avatar');
const formData = new FormData();
formData.append('file', fileInput.files[0]);
fetch('/upload.php', {
method: 'POST',
body: formData
});
浏览器会自动给FormData设置正确的Content-Type,包含boundary参数。你要是手动写了
Content-Type: multipart/form-data,boundary就丢了,后端解析不了。改一下就行:
PHP端接收:
还有个容易漏的点:fileInput.files[0] 可能是undefined,确认下用户真的选了文件再append。
如果用的是axios,axios会自动处理,但fetch得注意别手动改Content-Type。
试试这样改:
或者更简单点,直接把headers那部分去掉也行,因为FormData对象会自动处理这些。我之前就被这个坑过,明明觉得都写对了却死活传不上去,后来发现是fetch太"智能"了。
另外记得检查下后端PHP的配置,确保upload_max_filesize和post_max_size够大,不然文件大了也传不上去。