• vue截图,上传,下载,预览


    1.   npm install   html2canvas -D  ;

    2. 需要截图的页面引入 

    import html2canvas from 'html2canvas'
    3.需要截图的容器加 ref;
    <div ref="imageTofile" class="dashboard-container home-box">
     

    js 里面

     getData() {
          getList().then(res => {
            const data = res.data
            setTimeout(() => {
              this.toImage()  //开始截图
            }, 1000)
          })
        },
      // 截图   页面元素转图片  此方法最好设置定时器执行
        toImage() {
          // 第一个参数是需要生成截图的元素,第二个是自己需要配置的参数,宽高等
          html2canvas(this.$refs.imageTofile, {
            backgroundColor: null,
            useCORS: true // 如果截图的内容里有图片,可能会有跨域的情况,加上这个参数,解决文件跨域问题
          }).then((canvas) => {
            const url = canvas.toDataURL('image/png')
            this.htmlUrl = url
            // 把生成的base64位图片上传到服务器,生成在线图片地址
            // this.sendUrl()  //上传
          })
        },
     
    // 图片上传服务器
        sendUrl() {
          // 如果图片需要formData格式,就自己组装一下,主要看后台需要什么参数
          const formData = new FormData()
          // 调用
          const blob = this.baseToBlob(this.htmlUrl)
          const fileOfBlob = new File([blob], new Date().getTime() + '.png')
          formData.append('file', fileOfBlob)
          upLoad(formData).then(res => {
            this.downUrl = res.data.url
          })
        },
         将base64转换为blob
        baseToBlob(dataurl) {
          var arr = dataurl.split(',')
          var mime = arr[0].match(/:(.*?);/)[1]
          console.log(mime)
          var bstr = atob(arr[1])
          var n = bstr.length
          var u8arr = new Uint8Array(n)
          while (n--) {
            u8arr[n] = bstr.charCodeAt(n)
          }
          return new Blob([u8arr], { type: mime })
        },
        // 将blob转换为file
        blobToFile(theBlob, fileName) {
          theBlob.lastModifiedDate = new Date()
          theBlob.name = fileName
          return theBlob
        },
    //预览  imgUrl :就是截图生成的base64
    downLoad(imgUrl) {
      
          if (window.navigator.msSaveOrOpenBlob) {
            var bstr = atob(imgUrl.split(',')[1])
            var n = bstr.length
            var u8arr = new Uint8Array(n)
            while (n--) {
              u8arr[n] = bstr.charCodeAt(n)
            }
            var blob = new Blob([u8arr])
            window.navigator.msSaveOrOpenBlob(blob, '商务看板' + '.' + 'png')
          } else {
            // 这里就按照chrome等新版浏览器来处理
            const a = document.createElement('a')
            a.href = imgUrl
            a.setAttribute('download', '商务看板.png')
            a.click()
          }
        },
     
    //说明一下  ,base64转化成BLOB 在转化成file 上传会按照文件流上传。
     
     
     
  • 相关阅读:
    第2天 轻量级RPC框架开发
    028_ajax的String,View,Object执行流程
    027_获取隐藏id值的两种方式
    009_myBatis删除多条记录open="(",写成了index="(".
    026_一次性删除多条数据的sql语句
    025_json请求头与form表单请求头?
    024_如何生成一个32位的uuid?
    023_如何实现一次性删除多条记录?
    022_同步请求与异步请求的区别?
    021_SpringMVC中拦截器的作用?
  • 原文地址:https://www.cnblogs.com/-youth/p/12935685.html
Copyright © 2020-2023  润新知