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使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue+element UI实现树形表格
Dec 29 Vue.js
Vue 修改网站图标的方法
Dec 31 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
解决vue中provide inject的响应式监听
Apr 19 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 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
详解js异步文件加载器
2016/01/24 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
jquery 双色表格实现代码
2009/12/08 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
Django框架 信号调度原理解析
2019/09/04 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
python def 定义函数,调用函数方式
2020/06/02 Python
python程序如何进行保存
2020/07/03 Python
详解如何修改python中字典的键和值
2020/09/29 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
2015年计划生育协会工作总结
2015/05/13 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技