vue mintui组件:多图片上传

vue图片上传组件,实现批量上传和单张上传功能,控制图片大小,数量,以及压缩处理,利用了mint-ui的提示框
监听两个参数,分别是MAX控制最多上传的数量,multiple控制是否批量上传,self.$emit(‘fileChange’, {base64, file, files});将处理后的数据通过自定义事件传递给父组件,父组件获取到压缩处理后的文件就可以使用AJAX等技术post给后台实现文件上传功能
————————————————
版权声明:本文为CSDN博主「cuteccc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cuteccc/java/article/details/78462250

<template>
  <div>
    <input ref="file"
           type="file"
           class="file-input"
           accept="image/*"
           :multiple="multiple"
           @change="change"/>
  </div>
</template>

<script>
  import {Indicator, MessageBox} from 'mint-ui';
  //  M设定可以上传图片的大小
  const M = 7;
  const UNIT = 1024;
  const MAX_SIZE = M * UNIT * UNIT;

  /**
   * @author xx
   *
   * @desc 图片上传
   * @module @components/updatefile
   *
   * @example
   * import {updatefile} from @components
   * Vue.component(Updatefile.name, Updatefile)
   * <updatefile :multiple="multiple"
   *                :max="max"
   *                @refDom="getDom"
   *                @fileChange="fileChange">
   * </updatefile>
   */
  export default {
    name: 'updatefile',
    /**
     * @member {Object}
     * @name props
     * @property {Boolean} multiple 是否可以同时上传多个文件
     * @property {Number} max 最多一次可以上传多少张
     */
    props: {
      multiple: Boolean,
      max: Number
    },
    data() {
      return {

      };
    },
    mounted() {
      this.getDom();
    },
    methods: {
      // 获取dom元素外部点击触发
      getDom() {
        let file = this.$refs.file;
        this.$emit('refDom', file);
      },
      // 图片数量是否超过max张
      isOutNumber(files) {
        const MAX = this.max;
        if (files.length > MAX) {
          MessageBox({
            title: '提示',
            message: `一次最多允许上传${MAX}张!`
          });
          return true;
        } else {
          return false;
        }
      },
      change(e) {
        let files = e.target.files;
        // 如果超过设定的张数张,提示
        if (this.isOutNumber(files)) {
          return;
        }
        let len = files.length;
        for (let i = 0; i < len; i++) {
          if (window.FileReader && files[i]) {
            if (files[i].size <= MAX_SIZE) {
              Indicator.open();
              // 读取文件转化图片base64
              let fr = new FileReader();
              let self = this;
              fr.onload = (e) => {
                let w = 300;
                let h = 300;
                let file = files[i];
                let compressPic = function(base64) {
                  // 将压缩处理后的图片传递出去
                  self.$emit('fileChange', {base64, file, files});
                };
                self.canvasDataUrl(e.target.result, w, h, compressPic);
              };
              fr.onerror = (e) => {
                Indicator.close();
              };
              fr.readAsDataURL(files[i]);
            } else {
              MessageBox({
                title: '警告',
                message: `${files[i].name}图片尺寸过大,图片请小于7M!`
              });
            }
          }
        }
      },
       //  利用canvas压缩图片
      canvasDataUrl(data, w, h, callback) {
        let newImg = new Image();
        newImg.src = data;
        let imgWidth, imgHeight;
        newImg.onload = () => {
          let img = document.createElement('img');
          img.src = newImg.src;
          imgWidth = img.width;
          imgHeight = img.height;
          let canvas = document.createElement('canvas');
          let ctx = canvas.getContext('2d');
          if (imgWidth > imgHeight) {
            imgWidth = w * imgWidth / imgHeight;
            imgHeight = h;
          } else {
            imgHeight = h * imgHeight / imgWidth;
            imgWidth = w;
          };
          canvas.width = imgWidth;
          canvas.height = imgHeight;
          ctx.clearRect(0, 0, w, h);
          // 处理png格式图片背景变黑的问题
          ctx.fillStyle = '#fff';
          ctx.fillRect(0, 0, canvas.width, canvas.height);
          ctx.drawImage(img, 0, 0, imgWidth, imgHeight);
          let rate = 0.7;
          let base64 = canvas.toDataURL('image/jpeg', rate);
          callback(base64);
        };
      }
    }
  };
</script>

浏览器地址栏输入
data:image/jpeg;base64,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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349