前端下载图片、文件(js)

文章介绍了两种前端下载方法:一种是利用Image和Canvas处理图片并转换为base64下载;另一种是通过axios以Blob类型请求文件并触发下载。同时,文中提到了处理参数的方法和下载后的资源释放。
摘要由CSDN通过智能技术生成

1.下载图片

    downImg(e) {
      //e 为图片的url
      var image = new Image()
      // 解决跨域canvas污染问题
      image.setAttribute('crossOrigin', 'anonymous')
      image.onload = function() {
        let canvas = 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 = document.createElement('a')
        a.download = 'download'
        a.href = url
        a.click()
      }
      image.src = e
      return Promise.resolve()
    },

 

2.下载文件

    buttonEvent(e) {
      let params = this.getQuery();//参数
      axios
        .post(接口, params, {
          responseType: "blob" // 指定响应类型为 Blob
        })
        .then(msg => {
          console.log(msg.data); //打印出来是blob对象,已经不是乱码了
          let url = window.URL.createObjectURL(msg.data); //表示一个指定的file对象或Blob对象
          let a = document.createElement("a");
          document.body.appendChild(a);
          a.href = url;
          a.download = "工单列表.xls"; //命名下载名称
          a.click(); //点击触发下载
          window.URL.revokeObjectURL(url); //下载完成进行释放
        });
    },
//处理参数
    getQuery() {
      let formInline = this.formInline;
      return {
        startTime: this.time ? this.time[0] : "",
        finishTime: this.time ? this.time[1] : "",
        faultName: formInline.faultName,
        faultItem: formInline.faultName ? formInline.faultItem : "",
        areas: formInline.cities,
        buildIds: formInline.buildIds,
        orderNo: formInline.orderNo,
        orderStatusItem: formInline.orderStatus
          ? formInline.orderStatusItem
          : "",
        columnName: formInline.columnName,
        orderType: formInline.orderType,
        orderSource: formInline.orderSource,
        sort: formInline.sort,
        page: formInline.page,
        size: formInline.size
      };
    },

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值