vue的axios请求怎么渲染到页面,axios请求图片

  vue的axios请求怎么渲染到页面,axios请求图片

  在后端写一个上传图片的接口不是很简单。你只需要把这个字段限定为图片格式,把逻辑保存在后端就可以了。前端处理涉及请求头、数据格式处理等。按照老传统,按字符串放图片进界面发现返回的400个错误都是直到我知道前端的FormData方法!

  

目录

   FormData是什么鬼?在vue和axios的配合下,一波append()set()delete()get()和getAll()有()

  

FormData是个什么鬼?

  通过多方查找和调查,得知这个神奇的东西是XMLHttpRequest Level 2的新对象,是在2008年2月提出的。它可以用来提交表单和模拟表单提交。当然最大的好处是可以上传二进制文件,所有表单元素的名称和值可以组成一个queryString,可以提交到后台。

  重要提示:您可以从所有表单元素的名称和值形成一个queryString,并将其提交到后台。这不就是后端所谓的数据格式转换吗?按照格式提交。前端和后端的分离绝对是异步提交,可以很好的解决这个问题!

  它也很容易使用。只需将表单form作为参数传入FormData构造函数即可!

  

在vue和axios的配合下实战一波

  !-

  在*中上传组件。vue组件

  我在这里使用buefy的vue组件。

  -

  form method= post enctype= multipart/form-data

  b-field class= file is-primary :class= { has-name :文件}

  b-upload v-model= file class= file-label @ input= getModifyAvatar()

  span class=file-cta

  b-icon class= file-icon icon= upload /b-icon

  span class=file-label 单击以上载/span

  /span

  文件名 v-if=文件

  {{ file.name }}

  /span

  /b-上传

  /b-字段

  /表单

  脚本

  导出默认值{

  data(){

  返回{

  UserInfo: ,//通过get请求将用户相关信息分配给它

  文件:空,

  }

  },

  方法:{

  //修改头像

  getModifyAvatar(){

  const formData=new formData();

  //构造formData数据

  formData.append(avatar ,this.file)

  //提交上传请求

  getModifyInfo(formData)。然后(res={

  this . userinfo . avatar=RES . data . avatar

  })

  },

  }

  }

  /脚本

  //api.js

  //这是我封装的全局请求方法

  从导入{请求}./网络/请求

  //修改用户头像

  export const getModifyInfo=(params)={

  退货请求({

  url: ve_register/1/,

  方法:“put”,

  标头:{ Content-Type : multipart/form-data },

  数据:参数

  })

  }

  看上面的代码,注意在发送请求时设置请求头。如上图,在html表单中也需要设置enctype=multipart/form-data ,否则无法工作!

  通过上面的例子,我们目前只使用了FormData的append()方法。大多数关于FormData的在线文章只提到append()方法。那么FormData对象有哪些方法呢?事实上,我们知道控制台曾经:

  之后我们在console有了重大发现。FormData对象的方法那么多,我们要自己测试一下,找出真相。以下是这些方法的一些解释:

  

append()

  append()方法用于向FormData对象添加一个键值对:

  fd.append(key1 , value 1 );

  fd.append(key2 , value 2 );

  是一个FormData对象,它可以是新创建的空对象,也可以已经包含一个窗体表单或其他键值对。

  

set()

  设置与相应键key对应的值

  fd.set(key1 , value 1 );

  fd.set(key2 , value 2 );

  append()方法有点类似。这两种方法的区别在于,当指定的键值存在时,append()方法将最后添加所有新添加的键值对,而set()方法将覆盖之前设置的键值对。或者举个例子,我们在前面形式的基础上追加()或设置()一个新的键值对:

  fd.append(name , will );

  有两个带有键名的键值对:

  这就是append()和set()的区别。如果设置的键值不存在,那么两种方法的效果是一样的。

  

delete()

  接收一个指示要删除的键值名称的参数。如果有多个相同的键值,它们将被一起删除:

  fd.append(name , will );

  FD . delete( name );

  表单中的姓名信息和append()添加的姓名信息已被删除。

  

get() 和 getAll()

  接收指示要查找的键的名称的参数,并返回与该键对应的第一个值。如果有多个相同的键,并且希望返回这个键的所有对应的value值。

  同样基于上面的表单表单:

  fd.append(name , will );

  console . log(FD . get( name ));//肖恩

  fd.append(name , will );

  console . log(FD . get all( name ));//[肖恩,威尔]

  

has()

  该方法还接收一个参数,该参数也是键的名称,并返回一个布尔值来确定FormData对象是否包含该键。以上面的表格为例:

  console . log(FD . has( name ));//真

  console . log(FD . has( Name ));//假

  其他就不介绍了。有兴趣的请自己验证,再写一遍,再敲一遍。比看什么文章都真实!

  如果上面的文章对你有帮助,请给我们的开源项目打个小星星:github.crmeb.net/u/xingfu非常感激!

  以上是Vue用axios上传图片时遇到的问题细节。更多关于Vue用axios上传图片的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: