全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

vuejs使用FormData实现ajax上传图片文件

我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用ajax能够无刷新上传图片等文件。

其实已经有朋友封装了相关的npm包,但是我想说用原生的js api来实现,也用不了多少代码,而且更灵活,能使用原生就尽量用原生。接下来就以一个简单的头像上传来说明如何使用。

效果图

前端实现

<template>
 <div class="admin">
 <div class="admin-content">
  <div class="edit">
  <div class="avatar">
   <div class="img">
   <img :src="avatar" @click="setAvatar">
   <span>更改</span>
   </div>
   <input type="file" name="avatar" accept="image/gif,image/jpeg,image/jpg,image/png" style="display:none" @change="changeImage($event)" ref="avatarInput">
  </div>
  <button type="button" @click="edit">确认修改</button>
  </div>
 </div>
 </div>
</template>
<script>
export default {
 data() {
 return {
  avatar: this.$store.state.administrator.avatar,
 }
 },
 methods: {
 edit() {
  // 修改了头像
  if (this.$refs.avatarInput.files.length !== 0) {
   var image = new FormData()
   image.append('avatar', this.$refs.avatarInput.files[0])
   this.axios.post('/avatar', image, {
   headers: {
    "Content-Type": "multipart/form-data"
   }
   })
  }
  }) 
 },
 setAvatar() {
  this.$refs.avatarInput.click()
 },
 changeImage(e) {
  var file = e.target.files[0]
  var reader = new FileReader()
  var that = this
  reader.readAsDataURL(file)
  reader.onload = function(e) {
  that.avatar = this.result
  }
 }
 }
}
</script>

解释一下上面代码的意思,当我们点击图片会触发setAvatar函数,该函数会触发input的click事件,于是就会弹出文件选择框,当我们选择了一张图片后,触发chageImage函数,这个函数的功能就是预览你上传的图片,单后当我们点击修改按钮后,就会把资源传到后端

后端处理

后端接收到你上传的资源,肯定要把资源保存到服务器,我就以Nodejs来说明,我使用formidable解析上传的数据

exports.avatar = function(req, res, next) {
 let form = new formidable.IncomingForm()
 form.parse(req, function(err, fields, files) {
 if (err) {
  return res.json({
  "code": 500,
  "message": "内部服务器错误"
  })
 }

 // 获取后缀名
 let extname = path.extname(files.avatar.name)
 let oldpath = files.avatar.path;
 let newpath = './public/avatar' + extname;
 let avatarName = 'avatar' + extname;
 // 更改名字和路径
 fs.rename(oldpath, newpath, function(err) {
  if (err) {
  return res.json({
   "code": 401,
   "message": "图片上传失败"
  })
  }
 })
 // 更新数据库
 db.updateMany('users', { "user": username }, { "avatar": avatarName },
  function(err, result) {
  if (err) {
   return res.json({
   "code": 401,
   "message": "头像更新失败"
   })
  }
  return res.json({
   "code":200,
   "message": "头像上传成功"
  })
  })
 })
}

后端解析ajax提交的数据和解析采用传统表单提交的数据方法一样,如果你是做前端开发的,不了解后端代码影响不大。
说这么多,还是来个demo吧,https://github.com/wmui/vueblog,这个小项目后台有个头像修改的功能,是使用ajax上传图片的,核心代码百行不到,前后端分离。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue  # ajax上传图片  # vue.js  # 上传图片  # Vue 使用formData方式向后台发送数据的实现  # vue使用axios上传文件(FormData)的方法  # Vue发送Formdata数据及NodeJS接收方式  # 后端  # 当我们  # 上传  # 表单  # 就以  # 就会  # 都有  # 你是  # 有个  # 这么多  # 要把  # 弹出  # 到你  # 不了解  # 跳转  # 会把  # 想说  # 来个  # 来实现 


相关文章: 北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  宝塔面板创建网站无法访问?如何快速排查修复?  微信推文制作网站有哪些,怎么做微信推文,急?  如何用已有域名快速搭建网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  建站之星导航配置指南:自助建站与SEO优化全解析  定制建站如何定义?其核心优势是什么?  建站之星CMS五站合一模板配置与SEO优化指南  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  h5在线制作网站电脑版下载,h5网页制作软件?  如何构建满足综合性能需求的优质建站方案?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  nginx修改上传文件大小限制的方法  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何用腾讯建站主机快速创建免费网站?  平台云上自主建站:模板化设计与智能工具打造高效网站  全景视频制作网站有哪些,全景图怎么做成网页?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  C#如何使用XPathNavigator高效查询XML  浅谈Javascript中的Label语句  c# 在ASP.NET Core中管理和取消后台任务  IOS倒计时设置UIButton标题title的抖动问题  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  C#怎么使用委托和事件 C# delegate与event编程方法  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  建站ABC备案流程中有哪些关键注意事项?  海南网站制作公司有哪些,海口网是哪家的?  高防服务器租用首荐平台,企业级优惠套餐快速部署  开源网站制作软件,开源网站什么意思?  高防服务器:AI智能防御DDoS攻击与数据安全保障  建站之星ASP如何实现CMS高效搭建与安全管理?  如何通过商城自助建站源码实现零基础高效建站?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  如何用花生壳三步快速搭建专属网站?  如何通过免费商城建站系统源码自定义网站主题与功能?  建站之星Pro快速搭建教程:模板选择与功能配置指南  建站之星展会模版如何一键下载生成?  建站之星2.7模板快速切换与批量管理功能操作指南  专业商城网站制作公司有哪些,pi商城官网是哪个?  ,怎么在广州志愿者网站注册?  简单实现Android验证码  建站之星伪静态规则如何正确配置?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  C++如何使用std::optional?(处理可选值) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。