详解Vue+axios+Node+express实现文件上传(用户头像上传)


Posted in Javascript onAugust 10, 2018

Vue 页面的代码

<label for='my_file' class="theme-color">
 <mu-icon left value="backup"></mu-icon>
 修改头像
</label>
<input type="file" ref="upload" name="avatar" id='my_file' style="display:none;" accept="image/jpg" @change="changeAvatar" />

axios接口

let ChangeAvatar = (img) => axios({
 url: '/user/changeavatar',
 method: 'post',
 anync: true,
 contentType: false,
 processData: false,
 data: img
})

js部分调用封装的接口

methods: {
  changeAvatar (event) {
   let img = event.target.files[0];
   let size = img.size;
   if (size > 3145728) {
    alert('请选择3M以内的图片!');
    return false;
   }
   let Form = new FormData();
   Form.append('avatar', img, this.avatar_name);
   API.ChangeAvatar(Form)
    .then((response) => {
     console.log(response)
    })
    .catch((error) => {
     console.log(error)
    })
  }
 }
  1. 在这里我并没有用form方式,而是将input隐藏,用label绑定input,当我们点击label的时候,也就点击了input
  2. 我将请求封装在了另一个文件里,为ChangeAvatar()函数,如果不封装,按常规写法一样是可以的
  3. Form.append('avatar', img, this.avatar_name);第一个参数为input的name,第二个参数为文件对象,第三个参数为文件的名字
  4. ajax new FormData() 方法提交文件时,不能用data:{a:1}的键值对方法提交,应当直接将文件对象提交data:FormData

后台node代码

const fileUpload = require('express-fileupload');
app.use(fileUpload());

app.post('/user/changeavatar', function(req, res) {
 console.log(req.files); // the uploaded file object
 let avatar = req.files.avatar;

 // Use the mv() method to place the file somewhere on your server
 avatar.mv('dist/static/img/avatar/'+req.files.avatar.name+'.jpg', function(err) {
  if (err)
   return res.status(500).send(err);

  res.send('File uploaded!');
 });
})

在这里我并没有用multer,而是用别人的npm包express-fileupload

代码运行,成功将图片上传到了指定目录

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

Javascript 相关文章推荐
如何让动态插入的javascript脚本代码跑起来。
Jan 09 Javascript
用函数式编程技术编写优美的 JavaScript_ibm
May 16 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
jquery隔行换色效果实现方法
Jan 15 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
jquery插件unobtrusive实现片段式加载
Jun 15 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
Dec 24 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
jQuery Ajax使用FormData对象上传文件的方法
Sep 07 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
基于Vuejs的搜索匹配功能实现方法
Mar 03 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
Aug 10 #Javascript
Bootstrap模态对话框中显示动态内容的方法
Aug 10 #Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 #Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
Aug 10 #Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
Aug 10 #Javascript
bootstrap下拉框动态赋值方法
Aug 10 #Javascript
layui实现点击按钮给table添加一行
Aug 10 #Javascript
You might like
php 空格,换行,跳格使用说明
2009/12/18 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
DOM精简教程
2006/10/03 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
python发布模块的步骤分享
2014/02/21 Python
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
python从入门到精通(DAY 1)
2015/12/20 Python
python实现发送邮件及附件功能
2021/03/02 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Django多数据库的实现过程详解
2019/08/01 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
联想C++笔试题
2012/06/13 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
电视购物广告词
2014/03/19 职场文书
应届毕业生求职信
2014/05/26 职场文书
八一建军节演讲稿
2014/09/10 职场文书
单位作风建设自查报告
2014/10/23 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
2015年店长工作总结范文
2015/04/08 职场文书