我相信很多使用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接收方式
# 后端
# 当我们
# 上传
# 表单
# 就以
# 就会
# 都有
# 你是
# 有个
# 这么多
# 要把
# 弹出
# 到你
# 不了解
# 跳转
# 会把
# 想说
# 来个
# 来实现
相关文章:
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何设置并定期更换建站之星安全管理员密码?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何使用Golang table-driven基准测试_多组数据测量函数效率
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何做静态网页,sublimetext3.0制作静态网页?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何在万网开始建站?分步指南解析
如何通过VPS搭建网站快速盈利?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
公司网站的制作公司,企业网站制作基本流程有哪些?
如何选择适合PHP云建站的开源框架?
如何快速登录WAP自助建站平台?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
高防服务器:AI智能防御DDoS攻击与数据安全保障
香港服务器租用每月最低只需15元?
网站制作模板下载什么软件,ppt模板免费下载网站?
如何通过西部建站助手安装IIS服务器?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何通过服务器快速搭建网站?完整步骤解析
公众号网站制作网页,微信公众号怎么制作?
湖北网站制作公司有哪些,湖北清能集团官网?
太原网站制作公司有哪些,网约车营运证查询官网?
h5网站制作工具有哪些,h5页面制作工具有哪些?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
已有域名和空间,如何快速搭建网站?
建站VPS推荐:2025年高性能服务器配置指南
浅析上传头像示例及其注意事项
建站VPS配置与SEO优化指南:关键词排名提升策略
宁波自助建站系统如何快速打造专业企业网站?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
制作网站的模板软件,网站怎么建设?
如何用免费手机建站系统零基础打造专业网站?
Swift中循环语句中的转移语句 break 和 continue
济南网站建设制作公司,室内设计网站一般都有哪些功能?
建站之星3.0如何解决常见操作问题?
如何获取开源自助建站系统免费下载链接?
建站之星代理商如何保障技术支持与售后服务?
如何确保FTP站点访问权限与数据传输安全?
如何通过老薛主机一键快速建站?
css网站制作参考文献有哪些,易聊怎么注册?
家具网站制作软件,家具厂怎么跑业务?
*请认真填写需求信息,我们会在24小时内与您取得联系。