vuejs使用FormData实现ajax上传图片文件
程序员文章站
2022-05-14 19:32:40
我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用aja...
我相信很多使用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吧,,这个小项目后台有个头像修改的功能,是使用ajax上传图片的,核心代码百行不到,前后端分离。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: js中less常用的方法小结
下一篇: JS原生数据双向绑定实现代码
推荐阅读
-
jquery使用FormData实现异步上传文件
-
yii使用activeFileField控件实现上传文件与图片的方法
-
PHP使用curl请求实现post方式上传图片文件功能示例
-
通过Ajax方式上传文件使用FormData进行Ajax请求
-
iOS开发-使用NSURLSession实现文件断点下载,文件离线续传以及图片上传
-
使用FormData进行Ajax请求上传文件
-
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
-
ajax实现异步文件或图片上传功能
-
Asp.Net Core中配置使用Kindeditor富文本编辑器实现图片上传和截图上传及文件管理和上传(开源代码.net core3.0)
-
使用隐藏的iframe 隐藏form提交,仿AJax无刷新提交,可以实现无刷新上传文件