FormData 对象的作用
1.模拟HTML表单,相当于将HTML表单映射成表单对象,自动将表单对象中的数据拼接成请求参数的格式。
2.异步上传二进制文件。
FormData对象的基本使用
- 准备HTML表单
<form action="post" id="form">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="button" name="button"/>
</form>
2.将HTML表单转化formData对象
var form = document.getElementById('form');
var formData = new FormData(form);
3.提交表单对象
xhr.send(formData);
FormData对象的实例方法
1.删除表单对象中属性的值
formData.delete('key');
2.获取表单对象中属性的值
formData.get('key');
3.设置表单对象中的属性的值
formData.set('key','value');
4.向表单对象中追加属性值
formData.append('key','values')
注意:set方法与append方法的区别是,在属性名已存在的情况下,set会覆盖已有键名的值,append会保留两个值。
FormData文件上传进度提示
客户端的核心代码:
file.onchange = function () {
//文件上传过程中持续触发onprogress事件
xhr.upload.onprogress = function (ev) {
//当上传文件大小/文件总大小 再将结果转换为百分数
//将结果赋值给进度条的宽度属性
bar.style.width = (ev.loaded / ev.total) * 100 + '&';
}
}
服务端实现文件上传的路由
import formidable from 'Formidable'
//实现文件上传的路由
app.post('/upload',(req,res) => {
//创建formidable表单解析对象
const form = new formidable.IncomingForm();
//设置客户端上传文件的存储路径
form.uploadDir = path.jonn(__dirname,'public','upload');
//保留上传文件的后缀名字
form.keepExtensions = true;
//解析客服端传递过来的fromdata对象
form.parse(req,(error,fields,files) => {
//将客户端传递过来的文件地址响应到客户端
res.send(files.attrName.path);
});
});