详解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 相关文章推荐
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
JavaScript 打地鼠游戏代码说明
Oct 12 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
javascript 获取元素样式必杀技
May 04 Javascript
document.write的几点使用心得
May 14 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
Vue-Router进阶之滚动行为详解
Sep 13 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
element中table高度自适应的实现
Oct 21 Javascript
Vue和Flask通信的实现
May 19 Vue.js
快速解决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代码
2013/03/24 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
js的2种继承方式详解
2014/03/04 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
初学Python函数的笔记整理
2015/04/07 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
python tkinter基本属性详解
2019/09/16 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
优秀员工年终发言演讲稿
2014/01/01 职场文书
高中学生评语大全
2014/04/25 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
节约用电通知
2015/04/25 职场文书
爱国电影观后感
2015/06/19 职场文书
2016猴年春节问候语
2015/11/11 职场文书
会议主持词通用版
2019/04/02 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS