Ajax文件上传
DOM方式只能获取字符串类型数据,不能获取二进制数据。可以通过FormData对象来获取二进制数据。
<?php
$path = "./uploads/".$_FILES['face']['name'];
echo move_uploaded_file($_FILES['face']['tmp_name'],$path);
html页面的业务代码如下:
<script type = "text/javascript">
window.onload = function ()
{
document . getElementById('btn') . onclick = function () {
var
frm = document . getElementById('frm');
var
fd = new FormData(frm);
var
req = new XMLHttpRequest();
req . open('post', './6-demo.php');
req . onreadystatechange = function () {
if (req . readyState == 4 && req . status == 200) {
if (req . responseText == '1') {
alert('上传成功');
} else {
alert('长传失败');
}
}
}
req . send(fd);
}
}
</script>
<form id = 'frm'><!--不需要enctype属性-->
用户名:<input type = "text" name = "username" id = ""><br>
头像:<input type = "file" name = "face" id = ""><br>
<input type = "button" value = "注册" id = 'btn'>
</form>
通过FormData对象收集二进制数据不需要设置<form>的enctype属性。