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

摘要:
基于多张图片读取后上传_图片格式大小_图片压缩_图片删除_提交到服务器的文件格式_每个图表都有不同的参数。代码如下:template template<div><van uploader v model=“fileListA”:preview full image=“false”:max count=“1”:after read=“DetailPotoA”style=“100%;”:disabled=“禁用”==this.deviceFile[index]){tmp.push;}}这设备文件=tmp;安慰log;},//读取前的图像格式判断{if(file.type!==“Image.jpg”){toast;returnfalse;}如果{Toast;returnfalse;}returntrue;},//将dataURL转换为文件格式dataURLtoFile{vararr=urlData.split(“,”),mime=arr[0].match(/:(.*?);/)[1] ,bstr=atob,n=bstr。长度,u8arr=newUint8Array;而(n--){u8arr[n]=bstr.charCodeAt;}returnnewBlob;},DetailPotoA{this.upLoaderImgFile;},DetailPotoB{this.upLoaderImgFile;},DetailPotoC{this.upLoaderImgFile;},UpLoaderImgFile{if{letcanvas=document.createElement;letcontext=canvas.getContext;myImage.src=file.content;//画布宽度letwidth=512;myImage.onload=()=˃{//画布大小根据图片的比例生成线宽=宽度/;//指定画布大小,即最后生成的图片画布的大小。width=width;Canvas.height=height;/*DrawImage画布绘制方法。(0,0)这意味着将画布的左上角作为起点。帆布宽度,画布。高度用于将图像缩小给定像素。小于画布的图片将具有黑色边缘。

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

在这里插入图片描述在这里插入图片描述
template模板

      <div>
        <van-uploader
          v-model="fileListA"
          :preview-full-image="false"
          :max-count="1"
          :after-read="DetailPotoA"
          style=" 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=" 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=" 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;
    },

免责声明:文章转载自《vant多张图上传_压缩_删除_将base64的格式转为file文件格式_每张图给不同的参数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[php]laravel框架容器管理的一些要点第四季-专题10-字符设备驱动模型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ftp命令

ftp命令是标准文件传输协议的用户界面。Ftp是在TCP/IP网络上的计算机之间传输文件的一种简单有效的方法。它允许用户传输ASCII文件和二进制文件。用户可以在目录中上下移动,列出目录内容,将文件从远程计算机复制到本地计算机,并将文件从本地计算机传输到远程系统。它用于确定用户可以对要传输的文件进行何种访问。用户显然需要知道进行ftp会话的计算机的名称或IP...

MySQL高可用集群方案

资源不足的小团队或小项目直接建议阿里云和腾讯云II。一些常见解决方案介绍1。MySQL主从架构2。MHA架构参考:生产环境MySQL数据库集群MHA在线实现解决方案MHA目前是MySQL高可用性中比较成熟的解决方案。...

Linux查看机器和硬盘的SN

查看硬件RAID中硬盘的SN#sas端口:[root@~]$smartctl-a/dev/sda dmegaraid,n***序列号:6RJ974SR***#sat端口[root@~]$smarttl-a/dev/sda-dsat+megaraid,n***序列号:6BRJ974SR***查看机器SN[root@~~]$dmidcode-t1**序列号...

Nginx设置KeepAlive为close

以腾讯首页为例,就有很多是请求是在客户端发生请求后,服务器响应完就立即关闭了。nginx不像apache,直接有指令keep-aliveoff/on;它使用的是keepalive_timeout[time],默认的时长为75,可以在http、server、location使用此指令。...

C# winform开发嵌套Chrome内核浏览器(WebKit.net)开发(一)

//Www.cnblogs.com/Maxq/p/6566558.htmlWebKit.net是WebKit的一个net包。使用它,。net程序可以非常方便地集成和使用webkit作为加载网页的容器。EventArgse){WebKit.WebKitBrowser=newWebKitBrowser();this.Controls.Add(浏览器);...

iReport制作报表,字数过多换行问题

1.当字段中显示的数据太长而无法放入表中时,需要自动换行。选择要更改的表(显示动态内容的字段),并将Stretchwithoverflow属性设置为选中。未选中前:选中后:2.然而,桌子坏了,非常难看。此时,我们需要设置一个属性,使同一行中的其他字段保持与换行字段相同的高度。此时,我们需要框选要显示在整行中的动态字段和表;将属性StretchType设置为R...