FormData上传文件时后端收不到file字段怎么办?

东方舒昕 阅读 5

我用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
});
我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
端木小利
问题应该出在fetch请求的配置上。我遇到过好几次类似情况,都是因为fetch默认不会自动设置Content-Type的boundary参数,导致后端无法正确解析multipart数据。

试试这样改:

const fileInput = document.querySelector('#avatar');
const formData = new FormData();
formData.append('file', fileInput.files[0]);

fetch('/upload.php', {
method: 'POST',
body: formData,
headers: {
// 这行是关键,让浏览器自动设置完整的Content-Type
'Content-Type': 'multipart/form-data'
}
});


或者更简单点,直接把headers那部分去掉也行,因为FormData对象会自动处理这些。我之前就被这个坑过,明明觉得都写对了却死活传不上去,后来发现是fetch太"智能"了。

另外记得检查下后端PHP的配置,确保upload_max_filesize和post_max_size够大,不然文件大了也传不上去。
点赞
2026-03-10 11:02