vant多张图上传_压缩_删除_将base64的格式转为file文件格式_每张图给不同的参数

vant after-read
基于多张图上传_图片格式大小_图片压缩_图片删除_file(binary)文件格式提交给服务端_每张图给不同的参数,代码如下

template模板

      <div>
        <van-uploader
          v-model="fileListA"
          :preview-full-image="false"
          :max-count="1"
          :after-read="DetailPotoA"
          style="width: 100%;"
          :disabled="disabled?true:false"
          @delete="inmgdeleteA(0)"
          :before-read="beforeRead"
        />
        <van-uploader
          v-model="fileListB"
          :preview-full-image="false"
          :max-count="1"
          :after-read="DetailPotoB"
          style="width: 100%;"
          :disabled="disabled?true:false"
          @delete="inmgdeleteA(1)"
          :before-read="beforeRead"
        />
        <van-uploader
          v-model="fileListC"
          :preview-full-image="false"
          :max-count="1"
          :after-read="DetailPotoC"
          style="width: 100%;"
          :disabled="disabled?true:false"
          @delete="inmgdeleteA(2)"
          :before-read="beforeRead"
        />
      </div>

  script中new两个函数

const myImage = new Image();
var formData = new FormData();

  methods函数方法

	//图片删除
    inmgdeleteA(index) {
      let tmp = [];
      for (let i = 0; i < this.deviceFile.length; i++) {
        if (this.deviceFile[i] !== this.deviceFile[index]) {
          tmp.push(this.deviceFile[i]);
        }
      }
      this.deviceFile = tmp;
      console.log(this.deviceFile, "this.deviceFile  -----delete");
    },
    //图片格式的判断
    beforeRead(file) {
      if (
        file.type !== "image/png" &&
        file.type !== "image/jpeg" &&
        file.type !== "image/jpg"
      ) {
        Toast("请上传 png,jpg格式图片");
        return false;
      }

      if (file.size >= 5242880) {
        Toast("请上传的图片不超过5兆");
        return false;
      }

      return true;
    },

    //将dataURL转成文件(file)格式
    dataURLtoFile(urlData, fileName) {
      var arr = urlData.split(","),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr], { type: mime }, { name: fileName });
    },
    DetailPotoA(file) {
      this.upLoaderImgFile(file, "idcardFrontPhoto");
    },
    DetailPotoB(file) {
      this.upLoaderImgFile(file, "idcardBackPhoto");
    },
    DetailPotoC(file) {
      this.upLoaderImgFile(file, "livingPhoto");
    },

    upLoaderImgFile(file, fileName) {
      if (file.file.size < 5242880 && file.file.size >= 307200) {
        let canvas = document.createElement("canvas");
        let context = canvas.getContext("2d");
        myImage.src = file.content;
        //画布宽度
        let width = 512;
        myImage.onload = () => {
          //画布大小按照图片的比例生成
          let height = width / (myImage.naturalWidth / myImage.naturalHeight);
          // 指定canvas画布大小,该大小为最后生成图片的大小
          canvas.width = width;
          canvas.height = height;
          /* drawImage画布绘制的方法。(0,0)表示以Canvas画布左上角为起点, canvas.width, canvas.height 是将图片按给定的像素进行缩小。*/
          /* 如果不指定缩小的像素,图片将以图片原始大小进行绘制,图片像素如果大于画布将会从左上角开始按画布大小部分绘制图片,最后得到的图片就是张局部图。图片小于画布就会有黑边。*/
          context.drawImage(myImage, 0, 0, canvas.width, canvas.height);
          // 将绘制完成的图片重新转化为base64编码,file.file.type为图片类型,0.92为默认压缩质量
          file.content = canvas.toDataURL(file.file.type, 0.92);
          //将base64编码的图片转成文件(file)格式
          let lastfile = this.dataURLtoFile(file.content, file.file.name);
          //把file转换成二进制形式(binart)并进行上传
          let uploadImg = this.upLoaderImg(lastfile, fileName);
        };
      } else {
        let uploadImg = this.upLoaderImg(file.file, fileName);
      }
    },

    upLoaderImg(file, fileName) {
      console.log(file, "493测试图片名称是否变了");
      //new 一个FormData格式的参数
      let params = new FormData();
      file.fileName = fileName;

      this.deviceFile.push(file);

      this.deviceFile.map((item, index) => {
        if (item.fileName == "idcardFrontPhoto") {
          params.append("idcardFrontPhoto", item);
        }
        if (item.fileName == "idcardBackPhoto") {
          params.append("idcardBackPhoto", item);
        }
        if (item.fileName == "livingPhoto") {
          params.append("livingPhoto", item);
        }
      });
      console.log(this.deviceFile, "this.deviceFile  -----530");
      this.Data = params;
    },

  

 

posted @ 2017-07-20 17:35  guanqinghua  阅读(105)  评论(0编辑  收藏  举报