关于前端下载的常用问题

关于前端下载的常用问题

1.前端利用a标签下载文件报文件格式于要拓展名不匹配

  原因: // import '@/mock/mock' 注释掉


2. 后端返回图片url地址,前端利用a标签下载

解决: a标签 href 加个后最:        a.href = `${imgsrc}?response-content-type=application/octet-stream`;


export class  Utils{

    static downloadFile(file, name){

        let link = document.createElement('a')

        let blob = new Blob([file], {type: 'application/vnd.ms-excel'})

        link.style.display = 'none'

        link.href = URL.createObjectURL(blob);

        link.download =  name  //下载的文件名

        document.body.appendChild(link)

        link.click()

        document.body.removeChild(link)

    }


   static downFile(imgsrc, name) { //下载图片地址和图片名

    let image = new Image();

    // 解决跨域 Canvas 污染问题

    image.setAttribute("crossOrigin", "anonymous");

    image.onload = function () {

      let canvas = top.document.createElement("canvas");

      canvas.width = image.width;

      canvas.height = image.height;

      let context = canvas.getContext("2d");

      context.drawImage(image, 0, 0, image.width, image.height)

      let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据

      let a = top.document.createElement("a"); // 生成一个a元素


      let event = new MouseEvent("click"); // 创建一个单击事件

      a.download = name || "photo"; // 设置图片名称

      a.href = url; // 将生成的URL设置为a.href属性

      a.target = '_blank';

      a.dispatchEvent(event); // 触发a的单击事件

    };

       image.src = imgsrc;

       image.src = imgsrc + '?v=' + Date.now();

    }


    static downloadImage(imgsrc,name) {

        const a = document.createElement('a');

        a.href = `${imgsrc}?response-content-type=application/octet-stream`;

        a.download = name || '';

        a.click();

        a.remove();

  }

    // 删除请求参数对象为null、空 、undefine的键

    static deleteProtoryTypeOfNull(obj){

        for ( var key in obj ){

            if ( obj[key]|| obj[key] === 0){

                // obj[key] = obj[key];

                if ( obj[key] instanceof Object){

                    Utils.deleteProtoryTypeOfNull(obj[key])

                  }

            }else{

                delete obj[key]

            }

        }

        return obj;

    }


   // 处理elment下拉数据

   static  transData(data, key='label', value='value'){

       if(!data)return;

       if(data instanceof Array){

           return  data.map(item => {

            return {

                ...item,

                value: item[key],

                label: item[value],

            }

      })

       }else if(data instanceof Object){

           let arr = []

          for(let i in data){

            arr.push({

                // ...item,

                value: i,

                label: data[i]

            })

          }

          return arr

       }else{

        return []

       }

   }


 }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容