一、介绍

element-ui的组件之一,用来点击上传文件

官方是使用 before-upload 限制用户上传的图片格式和大小。但是某些浏览器不支持此方法,所以使用on-change来代替。

二、代码

<template>
<!--选择图片-->
<el-upload
style="width: 100%;"
action="/"
class="avatar-uploader"
accept="image/*"
:auto-upload="false"
:show-file-list="false"
:on-change="selectPic">
<img v-if="imgUrl" :src="imgUrl" class="avatar">
<div v-else class="avatar-uploader-icon">
<div style="padding-bottom: 20px">
<img :src="back||'/static/media/imgUpload.png'" height="80" style="margin-bottom: 10px;margin-top: 30px">
<br>
<span style="line-height: 20px"> {{text}}</span>
</div>
</div>
</el-upload>
</template>
<script>
export default {
name: "selectImg",
data() {
return {}
},
props: ['imgUrl', 'text', 'back'],
created() {
},
methods: {
selectPic(file) {
this.GetPicFileBase64(file, (base64) => {
this.$emit('select', base64.split(',')[1], file)
})
return false
}
}
}
</script> <style>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 5px;
cursor: pointer;
display: block;
box-sizing: border-box;
overflow: hidden;
} .avatar-uploader .el-upload:hover {
border-color: rgb(245, 207, 150);
} .avatar-uploader-icon {
font-size: 20px;
color: #8c939d;
margin: 8px;
background: rgb(216, 234, 242);
border-radius: 5px;
box-sizing: border-box;
} .avatar {
width: 100%;
display: block;
}
</style>
//图片上传处理
Vue.prototype.GetPicFileBase64 = function (file, callback) {
let load = (base64) => {
if (base64 && file.raw.size < (this.$store.state.max_pic_size * 1024 * 1024) && file.raw.type.match("image")) {
callback(base64)
} else {
alert(`请检查图片文件类型,大小不超过${this.$store.state.max_pic_size}MB`)
}
}
let err = (e) => {
this.Log(e)
alert("读取文件失败,请检查浏览器设置重试")
}
let base64 = ''
if (Image) {
let Img = new Image();
Img.src = file.url;
Img.onload = () => {
let width = Img.width;
let height = Img.height;
let canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
canvas.getContext("2d").drawImage(Img, 0, 0, width, height);
base64 = canvas.toDataURL('image/jpeg', 0.8);
load(base64)
}
Img.onerror = err
} else if (FileReader) {
let fr = new FileReader()
fr.readAsDataURL(file.raw)
fr.onerror = err
fr.onload = (e) => {
base64 = e.target.result
load(base64)
}
} else {
alert("您的设备有不兼容的功能,请更换浏览器重试或联系客服")
return
}
}

el-upload文件上传组件的更多相关文章

  1. Vue.js 3.0搭配.NET Core写一个牛B的文件上传组件

    在开发Web应用程序中,文件上传是经常用到的一个功能. 在Jquery时代,做上传功能,一般找jQuery插件就够了,很少有人去探究上传文件插件到底是怎么做的. 简单列一下我们要做的技术点和功能点 使 ...

  2. Atitit..文件上传组件选型and最佳实践总结(2)----断点续传

    Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 如何判断一个插件/控件是否支持断点续传?? 1 3. 常用的组件选型结果::马 1 4. 自定 ...

  3. ASP中文件上传组件ASPUpload介绍和使用方法

    [导读]要实现该功能,就要利用一些特制的文件上传组件.文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件 1 下载和安装ASPUpload  要实现该功能,就要利用一些特制的文件上 ...

  4. Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP

    Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 怎样推断一个插件/控件是否支持断点续传?? 1 3. 经常使用的组件选型结果::马 1 4.  ...

  5. 文件上传组件FileUpload 以及邮箱搭建JavaMail

     文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...

  6. Baidu WebUploader 前端文件上传组件的使用

    简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...

  7. BootStrap fileinput.js文件上传组件实例代码

    1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...

  8. Bootstrap fileinput.js,最好用的文件上传组件

    本篇介绍如何使用bootstrap fileinput.js(最好用的文件上传组件)来进行图片的展示,上传,包括springMVC后端文件保存. 一.demo   二.插件引入 <link ty ...

  9. Commons FileUpload文件上传组件

    Java实现的文件上传组件有好几种,其中最为“官方”的要数Apache Commons库中的FileUpload了吧. 页面 <form method="POST" enct ...

  10. jQuery.uploadify文件上传组件实例讲解

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

随机推荐

  1. springboot java.util.NoSuchElementException: No value present 异常处理

    使用jpa查询的时候,如果查询不到数据,就会返回这个错误,下面是处理方法. @Override public User findByEmail(String email) { User user = ...

  2. php上传(三)

    关于一些上传插件的运用 JQuery上传插件Uploadify使用详解 http://www.cnblogs.com/oec2003/archive/2010/01/06/1640027.html

  3. 使用GDI+绘制的360风格按钮控件

    将下面的代码拷贝到一个单元中,创建一个包,加入这个单元后安装.使用的时候设置好背景颜色,边框颜色,图标(png格式)相对路径的文件名称.这个控件可以利用PNG图像的颜色透明特性,背景色默认透明度为50 ...

  4. BZOJ 3779: 重组病毒(线段树+lct+树剖)

    题面 escription 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力极强.为了阻止这种病毒传播,某安全机构策划了一次实验,来研究这种病 ...

  5. 数据结构C++版-线性表

    PS:资料来源慕课网视频. 一.什么是线性表 线性表是n个数据元素的有限序列. 分类: 二.补充知识点 1.栈和队列有出操作.入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值 ...

  6. flutter layout-child

    一.Container 二.Padding 三.Center 四.Align 五.FittedBox 六.AspectRatio 七.ConstrainedBox 八.Baseline 九.Fract ...

  7. JVM内核-原理、诊断与优化学习笔记(九):锁

    文章目录 线程安全 多线程网站统计访问人数 多线程访问ArrayList 对象头Mark Mark Word,对象头的标记,32位 描述对象的hash.锁信息,垃圾回收标记,年龄 偏向锁 轻量级锁 B ...

  8. [kuangbin带你飞]专题一 简单搜索 - L - Oil Deposits

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  9. [14]APUE:API for Mysql

    库:/usr/lib64/libmysqlclient.so.#.#... 头文件:/usr/lib64/mysql/mysql.h 一.建立连接 MYSQL *mysql_init(MYSQL *) ...

  10. [02]APUE:POSIX 正则库(#include <regex.h>)

    正则匹配流程: 声明一个 regex_t 类型的变量(结构体) regcomp 函数会将“正则匹配条件”写入此结构体,并编译成特定的二进制格式(加快匹配速度) 声明一个 regmatch_t 类型的变 ...