如何使用纯香草javascript和php上传文件
How to upload file using pure vanilla javascript and php?
我有一个现有的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
数组似乎为空。我为$_POST
做了一个print_r
,它给出了Array()
。我做错了什么?
您使用的FormData
与普通表单的工作方式非常相似。
首先,在PHP中,文件不会在$_POST
中,而是在$_FILES
中,请参阅文档。
该文档与$_FILES
缓冲区一起提到的是,您需要使用multipart/form-data
编码,通过XMLHttpRequest
传输的任何FormData
默认情况下都会有此设置,但如果$_FILES
保持为空,您可能需要检查它。您应该删除xhr.setRequestHeader("Content-type","image");
并让XHR
对象处理它,如果这不起作用,则添加
xhr.setRequestHeader("Content-type","multipart/form-data");
这里有一个非常好的例子,在stackoverflow
相关文章:
- 如何在php文件中获取$.post-ajax传递的值
- Javascript运行php文件,然后下载文件
- 通过Ajax将JavaScript函数传递给PHP文件
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 通过ajax到php文件获取单选按钮值
- 每天用javascript包含不同的php文件
- 如何使用javascript调用Php文件
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 包括php文件和几个js文件
- 将JavaScript变量传递到HTML输入框和(在PHP文件中使用)
- PHP文件没有't从Javascript应用程序获取$_POST
- 如何显示由ajax调用运行的PHP文件的echo
- 如何将php变量从php文件传递到js文件
- 如何使用javascript/jquery将变量从一个PHP文件传递到另一个PHP文件
- 在同一主机上对PHP文件使用XMLHTTP请求的Javascript违反了同源策略
- 通过Wordpress中的jquery调用运行php文件
- 通过Javascript调用php文件
- 如果($_SERVER[“REQUEST_METHOD”]=“POST”)条件在ajax调用不同的php文件进行验证和提