VUE之图片Base64编码使用ElementUI组件上传


Posted in Vue.js onApril 09, 2022

ElementUI上传Base64编码后的图片

自我认为ElementUI还是一个很不错的写手机端的组件,所以这次做小项目的时候就用了ElementUI的Upload组件来实现图片的上传,不过ElementUI组件的上传图片更易于实现图片以File文件的形式实现,但是这次我需要把图片转换为base64编码来实现图片的上传。

安装ElementUI

npm i element-ui -S

按需引入(当然如果需要你也可以全部引入)

import { Upload } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(Upload);

上传实现 

<template>
    <div>
       <el-upload
          class="avatar-uploader"
          :action="actionUrl"
          :show-file-list="false"
          :on-change="getFile">
          <img v-if="imageUrl" ref="phoUrl" :src="imageUrl" class="avatar">
          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>
    </div>
</template>
<script>
import {Toast} from "mint-ui";
export default {
   data() {
      return {
       actionUrl:'',
       imageUrl:'', //上传图片
      };
    },
    methods: {
     getBase64(file){  //把图片转成base64编码
         return new Promise(function(resolve,reject){
             let reader=new FileReader();
             let imgResult="";
             reader.readAsDataURL(file);
             reader.onload=function(){
                 imgResult=reader.result;
             };
             reader.onerror=function(error){
                 reject(error);
             };
             reader.onloadend=function(){
                 resolve(imgResult);
             }
         })
     },
     getFile(file,fileList){  //上传头像
       this.getBase64(file.raw).then(res=>{
           this.$http.post('home/ImgUpload',{"img":res}).then(result=>{
               if(result.body.status===200){
                   this.imageUrl=result.body.data;
               }else{
                   Toast('图片上传失败');
               }
           })
       })
     }
    }
}
</script>
<style>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
    width:101px;
    height:101px;
  }
  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader .el-upload .el-upload__input{
      display: none;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 100px;
    height: 100px;
    line-height: 100px;
    text-align: center;
  }
  .avatar {
    width: 100px;
    height: 100px;
    display: block;
  }
</style>

ElementUI把上传的图片转为Base64

使用组件,然后on-change绑定一个方法来获取文件信息,auto-upload设置为false即可 

 <el-upload action='' :on-change="getFile" :limit="1" list-type="picture" :auto-upload="false">
            <el-button size="small" type="primary">选择图片上传,最多上传一张图片</el-button>
          </el-upload>

定义methods方法,当上传文件就会触发绑定的函数,然后文件的内容就会绑定到函数的参数里面,这样用file.raw就可以获取文件的内容了。

  getFile(file, fileList) {
     console.log(file.raw)
    },

然后自定义一个方法,用来把图片内容转为base64格式,imgResult就是base64格式的内容了。转为base64字符串要调用h5特性中的FileReader这个api,但是这个api不能return,所以用promise封装一下。

 getBase64(file) {
      return new Promise(function(resolve, reject) {
        let reader = new FileReader();
        let imgResult = "";
        reader.readAsDataURL(file);
        reader.onload = function() {
          imgResult = reader.result;
        };
        reader.onerror = function(error) {
          reject(error);
        };
        reader.onloadend = function() {
          resolve(imgResult);
        };
      });
    },

最后调用一下

 getFile(file, fileList) {    
      this.getBase64(file.raw).then(res => {
      console.log(res)
      });
    },

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
Vue组件生命周期运行原理解析
Nov 25 Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
Vue router配置与使用分析讲解
Dec 24 Vue.js
vue如何实现关闭对话框后刷新列表
Apr 08 #Vue.js
vue实现列表垂直无缝滚动
Apr 08 #Vue.js
vue3引入highlight.js进行代码高亮的方法实例
vue中的可拖拽宽度div的实现示例
vue 实现弹窗关闭后刷新效果
Apr 08 #Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 #Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 #Vue.js
You might like
如何使用PHP获取网络上文件
2006/10/09 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
js全选按钮的实现方法
2015/11/17 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
简单实现python进度条脚本
2017/12/18 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
为什么说python适合写爬虫
2020/06/11 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
python给list排序的简单方法
2020/12/10 Python
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
Internet体系结构
2014/12/21 面试题
2014年仓管员工作总结
2014/11/18 职场文书
超市主管竞聘书
2015/09/15 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL