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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
Vue如何清空对象
Mar 03 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中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
初婚未育证明
2014/01/15 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
车间机修工岗位职责
2014/02/28 职场文书
仲裁协议书
2014/09/26 职场文书
义诊活动总结
2015/02/04 职场文书
2015高考寄语集锦
2015/02/27 职场文书
婚宴新娘致辞
2015/07/28 职场文书
提档介绍信范文
2015/10/22 职场文书
导游词之唐山景点
2019/12/18 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
Redis特殊数据类型bitmap位图
2022/06/01 Redis