FormData记录

整体流程:前台——>nodejs——>后端接口

FormData

//创建对象
var formData = new FormData()
//向formData中添加数据(添加到formData末尾)
formData.append('a',1)
formData.append('a',2)
formData.append('b',3)
//读取formData中的数据(当formData中只有这一个键的时候,返回对应值,当这个键对应多个值,返回该键对应的第一个值)
formData.get('a')//1
formData.get('b')//3
//修改数据(当键名已存在就修改对应值,没有该键就在末尾添加这个键值对)
formData.set('a',4)
formData.set('c',5)
// 删除数据(根据键名删除,当多个值共用同一个键的时候会删掉这个键的所有键值对)
formData.delete('a')//此时获取键名为a的值时返回null
formData.delete('b')
//清空数据
var formData = new FormData()

type=“file”

所有文件类型的input都有一个默认属性:files。

var file = document.getElementsByTagName('input')[0]//获取第一个file型input节点
file.onchange = function(){
	console.log(file.files)
}

控制台结果

FormData记录
可选择多个文件的file的files属性值:
FormData记录

将file添加到formData

//单个文件添加方式
var file = document.getElementsByTagName('input')[0]//获取第一个file型input节点
formData.append('file',file.files[0])//键名为接口所需名字
//多个文件添加方式
for(var i = 0;i < file.files.length;i++){
	formData.append('file',file.files[i])
}//本来打算把文件信息放到数组里面,再把数组单个添加到formData里面,但是调用接口传formData的类型不是binary,而是[object file],类型是不对的

调node接口

文件类型之外的参数拼到链接里面,data单独放封装好的FormData对象

axios({
      method:'post',
      url:`/index/draft?userId=${6}&context=${textarea.value}`,   
      data:imgFormData,//封装好的FormData对象
      headers: {
          'Content-Type': "multipart/form-data",
      },//修改请求头中的Content-Type,浏览器会根据Content-Type设置的形式读取文件,默认是application/www-url-encoded,如果不把Content-Type修改为multipart/form-data,浏览器会默认将数据以键值对形式读取,会调用接口失败
  })
  .then(data=>{
      
  })
  .catch(err=>{
      
  })

nodejs获取前台传来的formData

前台调用接口同时传参数和formData,本来以为获取发送的数据只是get对应req.query,post对应req.body,但是后来发现尽管是post请求,但是在前台调用node接口时拼到链接里面的参数要用req.query获得,前台传来的文件要通过request.files获得。
打印结果:
FormData记录

调用后端接口

let formData = new FormData()
 for(var a in req.files){
     formData.append('file',fs.createReadStream(req.files[a].path));//node接收前台传来的图片会把它放到本地的一个文件夹里面,这里的path就是前面对应的路径,在本机可以找到,给后端上传图片为什么只需要传图片,不用给图片的其他信息,搞不懂
 }
 axios({
     url:`/index/saveDrafts?userId=${userId}&context=${context}`,
     data:formData,
     method:'post',
     headers:formData.getHeaders()
 })
 .then(data=>{
     res.send({err:0})
 })
 .catch(err=>{
     res.send({ err })
     console.log(err)
 })

总结

上传文件我每次写都有问题,每次都找别人帮忙改,我太裂开了。他最近买了本图解HTTP,天天说话离不开这本书,说他看完了就给我让我看,说他要是在我这个时候看到这本书那他现在改bug都是分分钟的事,总之就是撺掇我看!!我麻了都。

上一篇:scp ftp samba windows send files to linux


下一篇:Python实现文件后缀名的批量修改