分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

vue实现图片上传

发布时间:2023-09-06 02:21责任编辑:彭小芳关键词:暂无标签

项目中用到的是上传头像,前端通过input[type="file"]来选择图片,给后端传递一个formData格式的数据,然后上传。代码如下:

我写了个组件,参数如下:

uploadType: 上传类型

width: 图片显示的宽度

height: 图片显示的高度

imgUrl: 如果之前有图片,图片的路径地址

getImgUrl: 在组件里上传成功之后,会得到图片路径的相关参数,该方法在父组件里面调用来获取子组件里返回的图片路径参数,这个事件要看需求,在父组件里需不需要上传之后返回的图片的相关路径,若不需要就不用写。

<upload :uploadType="`head`" :imgWidth="`85px`" :imgHeight="`104px`" :imgUrl="imgUrl"
???@upload="getImgUrl"></upload>
//接收子组件emit的事件
getImgUrl(data) {
??//data ?得到的就是返回的图片路径的相关参数
}
//upload组件里的代码
<template>
???<div class="avatar">
???????<div @mouseover="showBg=true" @mouseleave="showBg=false">
???????????<div class="bg" v-if="showBg" :style="`line-height:${imgHeight}`">点击上传</div>
???????????<input type="file" class="input-file" :style="`width:${imgWidth};height:${imgHeight};`" name="avatar" ref="avatarInput" @change="changeImage($event)" accept="image/gif,image/jpeg,image/jpg,image/png">
???????????<img :src="avatar?avatar:require(‘../assets/images/man.png‘)" ?:style="`width:${imgWidth};height: ${imgHeight};`" name="avatar">
???????</div>
???????<div class="text" @click="upload" v-if="file">确定上传</div>
???</div>
</template>
<script>
export default {
???name: ‘upload‘,
???data(){
???????return{
???????????avatar: ‘‘,
???????????file: ‘‘,
???????????showBg: false
???????}
???},
???props: ["uploadType", "imgUrl", "imgWidth", "imgHeight"],
???created(){
???????this.avatar = this.imgUrl
???},
???methods: {
???????changeImage: function(e){
???????????let file = e.target.files[0];
???????????this.file = file
???????????console.log(this.file)
???????????let reader = new FileReader()
???????????let that = this
???????????reader.readAsDataURL(file)
???????????reader.onload= function(e){
???????????????that.avatar = this.result
???????????}
???????},
???????upload: function(){
???????????if(this.$refs.avatarInput.files[0].length !== 0){
???????????????let data = new FormData();
???????????????data.append(‘multfile‘, this.$refs.avatarInput.files[0]);
???????????????data.append(‘operaType‘, this.uploadType);
???????????????this.$store.dispatch(‘UPLOAD_HEAD‘, data) //调用上传接口,把data传递给接口
???????????????.then(res => {
???????????????????this.file = ‘‘;
???????????????????let data = res.data.data;
???????????????????//给父组件传递emit事件,把返回的图片路径相关参数传递过去
???????????????????this.$emit("upload", data );
???????????????????this.$message({
???????????????????????type: "success",
???????????????????????message: "上传成功!"
???????????????????})
???????????????}).catch(err => {
???????????????????console.log(err)
???????????????????if(err.data.msg){
???????????????????????this.$message({
???????????????????????????type: "error",
???????????????????????????message: err.data.msg
???????????????????????})
???????????????????}else {
???????????????????????this.$message({
???????????????????????????type: "error",
???????????????????????????message: "上传失败"
???????????????????????})
???????????????????}
???????????????})
???????????}
???????},
???}
}
</script>
<style lang="less" scope>
.avatar {
???cursor: pointer;
???position: relative;
???.input-file {
???????position: absolute;
???????top: 0;
???????left: 0;
???????opacity: 0;
???????cursor: pointer;
???}
???.bg {
???????width: 100%;
???????height: 100%;
???????color: #fff;
???????background-color: rgba(0,0,0,0.3);
???????text-align: center;
???????cursor: pointer;
???????position: absolute;
???????top: 0;
???????left: 0;

???}
???.text {
???????padding-top: 10px;
???????color: lightblue;
???}
}
</style>

vue实现图片上传

原文地址:https://www.cnblogs.com/yingjundeng/p/9928192.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved