FormData
FormData是XMLHttpRequest Level 2 新增的一个接口。
使用FormData可以实现各种文件上传。
使用
// 创建FormData的实例
var formdata = new FormData();// 用append()为实例添加键和值
formdata.append(键名, 键值);
注意
使用jq的$.ajax()方法来进行文件上传时,需要设置contentType和processData两个参数。
参数 | 类型 | 说明 |
contentType | String | 当发送信息至服务器时,内容编码类型默认为“application/x-www-form-urlencoded”。 该默认值适合大多数应用场合。 |
processData | Boolean | 默认为true。 默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型“application/x-www-form-urlencoded”。 如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。 |
从上面两个参数的说明可以看出,ajax发送数据的时候内容编码类型是“application/x-www-form-urlencoded”,
而我们上传的文件可能是其他类型,所以上传的时候不设置内容类型,故 contentType: false,
不对数据做处理,故 processData: false 。
实例
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>jq实现前端文件上传</title>
</head>
<body><input id="file" type="file"><button id="btn">上传</button><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script>$('#btn').click(function() {var formdata = new FormData();formdata.append("file", $('#file')[0].files[0]);$.ajax({type: "POST",url: "你要将文件上传到的地址",data: formdata,contentType: false, // 不设置内容类型
processData: false, // 不处理数据
dataType: "json",success: function(data) {// 请求成功后要执行的代码
},error: function(data) {// 请求失败后要执行的代码
}});});</script>
</body>
</html>
观察
console.log($('#file')[0]);
console.log($('#file')[0].files[0]);
从上面的打印结果可以看到我们传的文件类型是“application/octet-stream”。
请求时的参数:
请求后的结果:
更多专业前端知识,请上 【猿2048】www.mk2048.com