Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。

举报
江咏之 发表于 2022/02/19 00:38:18 2022/02/19
【摘要】 URL文件地址下载方法 一、正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性 //文件下载 downFile() { if ('downloa...

URL文件地址下载方法
一、正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性

    //文件下载
    downFile() {
      if ('download' in document.createElement('a')) {
        // 非IE下载
        const elink = document.createElement('a')
        elink.href = imgView + 'group1/M00/00/88/FGQfoGIOD3mAW4ezAABGAM4MtrA503.xls' //file.url
        elink.download = 'xyqzmb.xls' //file.name
        elink.style.display = 'none'
        //link.target="_blank";
        elink.click()
     }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

由于a.download跨域会失效,上面代码只可同域实现

二、通过blob实现跨域下载并修改文件名(同样适用于URL地址)
在这里插入图片描述
方法

    //通过文件下载url拿到对应的blob对象
    getBlob(url) {
      return new Promise(resolve => {
        const xhr = new XMLHttpRequest()
        xhr.open('GET', url, true)
        xhr.responseType = 'blob'
        xhr.onload = () => {
          if (xhr.status === 200) {
            resolve(xhr.response)
          }
        }

        xhr.send()
      })
    },

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
    //下载文件   js模拟点击a标签进行下载
    saveAs(blob, filename) {
      var link = document.createElement('a')
      link.href = window.URL.createObjectURL(blob)
      link.download = filename
      link.click()
    },

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

事件调用

 <a-button type="primary" icon="download" @click="downFile">下载</a-button>

  
 
  • 1
    //文件下载
    downFile() {
      let fileUrl = imgView + 'group1/M00/00/88/FGQfoGIPDfuAErRaAABGAH4FyJ4422.xls'  //服务器文件地址
      this.getBlob(fileUrl).then(blob => {
        this.saveAs(blob, '信用权证使用导入模板件名.xlsx')
      })
    },

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
以上是直接拿文件url地址下载。

请求接口下载文件方法: 以下方法仅供参考,项目不同,调用方法不同

vue组件

import { exportxlsx } from '@/api/api'

  
 
  • 1
//导出
    exportData() {
      let req = {
        createStartDate: this.startDate,
        createEndDate: this.endDate,
        status: this.status,
      }
      exportxlsx('/sys/mjBaseCount/exportMjGuaCountData', req).then(res => {
        console.log(res);
        this.loading = false
        const content = res
        const blob = new Blob([content])
        const fileName = '担保方式统计.xlsx'
        if ('download' in document.createElement('a')) {
          // 非IE下载
          const elink = document.createElement('a')
          elink.download = fileName
          elink.style.display = 'none'
          elink.href = URL.createObjectURL(blob)
          document.body.appendChild(elink)
          elink.click()
          URL.revokeObjectURL(elink.href) // 释放URL 对象
          document.body.removeChild(elink)
        } else {
          // IE10+下载
          navigator.msSaveBlob(blob, fileName)
        }
      })
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

api.js文件

import {  exportFunc } from '@/api/manage'

  
 
  • 1
//导出
const exportxlsx = (url, params) => {
    params.brNo = "000000"

    let req = {
        "bizContent": JSON.stringify(params),
        "msgTime": "2019-10-24 16:58:54",
        "msgDate": "2019-9-4",
        "timeStamp": 1571907534171,
        "nonceStr": "WZuQFVCnNUueCGg94m5tvqB97kcaS4H2",
        "version": "1",
        "userId": params.userId ? params.userId : sessionStorage.getItem('USER_ID'),
        "userName": sessionStorage.getItem('USER_NAME'),
        "transCode": "",
        "signType": "",
        "brNo": sessionStorage.getItem('BR_NO'),
        "appId": "client03",
        "sourceId": "sys",
        "sign": "8F38F92EFEB7306F4AE472E3CE637C54"
    }

    if (params.curBrNo !== '' &&
        params.curBrNo !== null && typeof params.curBrNo !== "undefined") {
        req.curBrNo = params.curBrNo
    }

    if (params.pageIndex !== '' &&
        params.pageIndex !== null && typeof params.pageIndex !== "undefined") {
        req.pageIndex = params.pageIndex
    }

    if (params.pageSize !== '' &&
        params.pageSize !== null && typeof params.pageSize !== "undefined") {
        req.pageSize = params.pageSize
    }

    let fullURL = url;
    if (fullURL.indexOf('http') < 0 && fullURL.indexOf('https') < 0) {
        fullURL = window._CONFIG['domianURL'] + fullURL;  
    }
    return exportFunc(
        fullURL,
        req,
        'post'
    )
}

export{exportxlsx }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

manage.js文件

import { axios } from '@/utils/request'   //导入axios请求方法  request封装axios文件

  
 
  • 1
export function exportFunc(url,parameter) {
  return axios({
    url: url,
    method:'post' ,
    data: parameter,
    responseType: 'blob'
  })
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

文章来源: jiangwenxin.blog.csdn.net,作者:前端江太公,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangwenxin.blog.csdn.net/article/details/122999731

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。