vue实现图片上传

项目中用到的是上传头像,前端通过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>

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

时间: 2024-08-09 12:48:42

vue实现图片上传的相关文章

Vue 做图片上传

Vue图片单图或者多图上传代码如下: <template> <div class="upimgBox"> <div class="container"> <div class="upload_warp_left" @click="fileClick" > <div class="addNote">+</div> </div>

vue 的图片上传,压缩,exif图片信息识别(手机拍摄横板问题)

1.file表单组件监听change获取file文件 2.创建fileReader 获取base64位图片路由 3.实例一个Image 将base64位图片路由对其进行赋值,创建canvas 通过drawImage方法对其进行等比例缩放复制,实现图片压缩 4.引入 exif-js 模块 获取旋转角度信息,非1的,对canvas进行旋转,重绘,再通过toDataURL 获取旋转矫正后的图片64位 5.调用回调函数进行图片上传 //upload import EXIF from "exif-js&q

vue 实现图片上传与预览,以及清除图片

vue写原生的上传图片并预览以及清除图片的效果,下面是demo,其中里面有vue获取input框value值的方法以及vue中函数之间的调用 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片demo</title> <link rel="stylesheet" href="../../css/font-a

vue 图片上传功能

这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix">   <li v-if="imgs.length>0" v-for='(item ,index ) in imgs'>   <img :src="item">   </li>   <li style="position:

vue项目富文本编辑器vue-quill-editor之自定义图片上传

使用富文本编辑器的第一步肯定是先安装依赖 npm i vue-quill-editor 1.如果按照官网富文本编辑器中的图片上传是将图片转为base64格式的,如果需要上传图片到自己的服务器,需要修改配置. 创建一个quill-config.js的文件,里面写自定义图片上传.代码如下 /*富文本编辑图片上传配置*/ const uploadConfig = { action: '', // 必填参数 图片上传地址 methods: 'POST', // 必填参数 图片上传方式 token: ''

vue 图片上传

功能说明: 1.调用手机拍照功能 2.调用相册功能 3.图片上传功能 4.图片预览功能 5.图片删除功能 记录个多图上传组件,关键点:1.input 新增multiple2.accept="image/*处理IOS.安卓手机启用摄像头3.根据createObjectURL处理图片预览4.formData构造函数创建空对象5.通过formData.getAll(),把文件流数据转为数组 组件示例图 组件代码 upload_img.vue <template> <div class

vue使用富文本编辑器vue-quill-editor实现配合后台将图片上传至七牛

一.全局注册:main.js import Vue from 'vue' import VueQuillEditor, { Quill } from 'vue-quill-editor' import { ImageDrop } from 'quill-image-drop-module' import ImageResize from 'quill-image-resize-module' import 'quill/dist/quill.core.css' import 'quill/dis

vue+element ui +vue-quill-editor 富文本图片上传到骑牛云

vue-quill-editor上传图片会转换成base64格式,但是这不是我们想要的,之后翻了很多文章才找到想要的,下面直接上代码 <style lang="sass">.quill-editor min-height: 500px background:#fff .ql-container min-height: 500px .ql-snow .ql-editor img max-width: 480px .ql-editor .ql-video max-width:

vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决:

//预览<div class="htmlViewBox"> <p v-html="activity_html_defaultMsg" v-show="htmlDefaultMsg"></p> <p v-show="defaultMsg=='' && htmlDefaultMsg==''">请在富文本编辑器内容</p></div>//编辑器&