ajax为什么要用formdata封装在提交数据

ajax为什么要用formdata封装在提交数据,第1张

一般文件上传是使用form表单提交,通常我们提交(使用submit button)时,会把form中的所有表格元素的name与value组成一个queryString,枯渗兆提交到后台。这用jQuery的方法来说,就是serialize。

通过$('#postForm').serialize()可以对form表单进行序列化,从而将form表单中的所有参数传递到服务端。

但是上述方式,没租只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。

不过如今主流浏览器喊启都开始支持一个叫做FormData的对象,有了这个FormData,我们就可以轻松地使用Ajax方式进行文件上传了。

但是提交以后会有刷新。而且文件本身是一个二进制流。这时可以创建一个formData。然后append该文件,然后封装成一个对象,直接进行ajax提交就可以了

具体如下:

var formdata = new FormData()

formData.append('file', $('#file')[0].files[0])

$.ajax({

url: '/upload',

type: 'POST',

cache: false,

data: formData,

processData: false,

contentType: false

}).done(function(res) {

}).fail(function(res) {})//向后台上传附件,传四个参数postFile(parentNodeId, nodeId){let param=new FormData()//创建 form对象param.append('businessNo',projectNo) param.append('packageNo', "commonProject") param.append("parentNodeId",parentNodeId) param.append("nodeId",nodeId) var uploadObject=event.target.files console.log(uploadObject)var i for( i in uploadObject){param.append("file", uploadObject[i]) } //console.log(param.get('file'))//查看file,需要使用get方法,FormData私有类对象,访问不到,可以通过get判断值是否传进去let config={headers:{'Content-Type': 'multipart/form-data'} //添加表头,因为模拟form提交时,上传文件,需要 } //this.fileList.push(e.target.files[0]) axios.post("/auditMgr/fileUp",param,config).then((res)=>{console.log(res.data) this.getuploadfile() })},

首先要声携辩明一点,本文讲的是使用node上传文件到远程服务器的,比如说我们可以使用node上传图片到CDN。如果小伙伴想看的是node服务如何接收客户端上传的文件,那么你不用往下看了。

在前端项目中,我们常用的办法是使用 input 元素选择文件,然后构建 js FormData类的实例,并调用append方法将文辩冲缺件添加到FormData实例判升中,然后使用ajax库发起ajax请求上传文件即可。

那么在node里面有什么不一样呢?

完成以上工作就可以使用ajax库上传文件到服务端了!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12288414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存