我有一个现有的html表单,一旦用户选择了一个图像文件,就会将文件上传到服务器。
我做过类似的事情。
//html code
<input type="file" id="photo" name="photo" accept="image/*" />
// the usual html stuff
document.getElementById('photo').addEventListener("change",uploadImage);
function uploadImage()
{
var xhr = new XMLHttpRequest();
xhr.open("POST","/upload.php",true);
xhr.setRequestHeader("Content-type","image");
var file = document.getElementById('photo').files[0];
if(file)
{
var formdata = new FormData();
formdata.append("pic",file);
xhr.send(formdata);
}
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200)
{
//some code
}
};
}
但在我的php文件中,我无法访问此上传的文件。 $_POST
数组似乎是空的。我为print_r
做了$_POST
,它给了Array()
。我做错了什么?
答案 0 :(得分:4)
您使用的FormData
与普通表单的工作方式非常相似。
首先,PHP文件不在$_POST
中,而是在$_FILES
,see the documentation中。
该文档提到的内容以及$_FILES
缓冲区是您需要使用multipart/form-data
编码,通过FormData
传输的任何XMLHttpRequest
都会默认情况下设置,但如果$_FILES
保持为空,您可能需要检查它。
您应该删除xhr.setRequestHeader("Content-type","image");
并让XHR
对象处理它 - 如果这不起作用 - 添加
xhr.setRequestHeader("Content-type","multipart/form-data");
有一个很好的例子right here at stackoverflow