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


Posted in Javascript onAugust 08, 2017

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

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

效果图

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

前端实现

<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上传图片的,核心代码百行不到,前后端分离。

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

Javascript 相关文章推荐
通过DOM脚本去设置样式信息
Sep 19 Javascript
基于jQuery实现文本框缩放以及上下移动功能
Nov 24 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 Javascript
基于Vue2的移动端开发环境搭建详解
Nov 03 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
Nov 03 Javascript
解决Vue不能检测数组或对象变动的问题
Feb 24 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
Jan 14 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 Javascript
vue编写简单的购物车功能
Jan 08 Vue.js
webpack的移动端适配方案小结
Jul 25 Javascript
基于Vue实现支持按周切换的日历
Sep 24 #Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 #Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
Aug 08 #Javascript
React Native如何消除启动时白屏的方法
Aug 08 #Javascript
react native带索引的城市列表组件的实例代码
Aug 08 #Javascript
React Native仿美团下拉菜单的实例代码
Aug 08 #Javascript
React-Native 组件之 Modal的使用详解
Aug 08 #Javascript
You might like
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
Python使用PIL模块生成随机验证码
2017/11/21 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
Java程序员常见面试题
2015/07/16 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
经典安踏广告词
2014/03/21 职场文书
整改报告怎么写
2014/11/06 职场文书
求职信格式范文
2015/03/19 职场文书
考勤制度通知
2015/04/25 职场文书
班主任寄语2016
2015/12/04 职场文书
导游词之西安骊山
2019/12/03 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis