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 Elenent实现表格相同数据列合并
Nov 30 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
vue+element ui实现锚点定位
Jun 29 Vue.js
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 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 XML数据解析代码
2010/05/26 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python实现简单的可逆加密程序实例
2015/03/05 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
C#基础面试题
2016/10/17 面试题
上课迟到检讨书
2014/01/19 职场文书
4s店活动策划方案
2014/08/25 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
个人党性分析总结
2015/03/05 职场文书
埃及王子观后感
2015/06/16 职场文书
电工生产实习心得体会
2016/01/22 职场文书
七年级数学教学反思
2016/02/17 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
Django框架中模型的用法
2022/06/10 Python