vue js 下载文件

这段代码展示了如何在JavaScript中利用axios库下载文件。通过设置请求方法、URL、参数、headers和responseType,实现了根据不同的文件类型(如jpg、doc、pdf等)下载文件,并在下载前进行了文件类型的检查。在下载完成后,文件会被立即删除,同时释放了占用的内存资源。
摘要由CSDN通过智能技术生成
//导出-下载按钮
  export(id) {
        let item = {
          params: {
            id: id,
          },
          name: "文件名",
          fileType: '.xls',
          method: 'post',
          url: "",
        }
        this.downloadFile(item) //下载
      },
      //下载文件
  downloadFile(item) {
    var fileType = this.checkFileType(item.fileType);
    if (fileType == "") {
      Message({
        message: '此文件格式不支持下载',
        type: 'error',
        showClose: true
      })
      return;
    }
    var fileName = item.name;
    axios({
        method: item.method,
        url: item.url,
        data: item.params,
        headers: {
          "Content-type": "application/json",
          "Authorization": localStorage.getItem("token"),
        },
        responseType: "blob"
      })
      .then(res => {
        console.log("文件流数据", res);
        var blob = new Blob([res.data], {
          type: fileType
        });
        var downloadElement = document.createElement('a');
        var href = window.URL.createObjectURL(blob); //创建下载的链接
        downloadElement.href = href;
        downloadElement.download = fileName + item.fileType; //下载后文件名document.body.appendChild(downloadElement);
        document.body.appendChild(downloadElement);
        downloadElement.click(); //点击下载
        document.body.removeChild(downloadElement); //下载完成移除元素
        window.URL.revokeObjectURL(href); //释放掉blob对象
      })
  },
//下载文件前的格式判断
  checkFileType(fileType) {
    fileType = fileType.substring(fileType.lastIndexOf(".") + 1).toLowerCase();
    var fileTypeBlob = "";
    switch (fileType) {
      case 'jpg':
      case 'png':
        fileTypeBlob = "image/jpeg";
        break;
      case 'doc':
      case 'docx':
        fileTypeBlob = "application/msword";
        break;
      case 'pdf':
        fileTypeBlob = "application/pdf";
        break;
      case 'xls':
      case 'xlsx':
        fileTypeBlob = "application/vnd.ms-excel";
        break;
      case 'ppt':
      case 'pptx':
        fileTypeBlob = "application/vnd.ms-powerpoint";
        break;
      case 'txt':
        fileTypeBlob = "text/plain";
        break;
      case 'xmind':
        break;
      case 'mp4':
        fileTypeBlob = "application/mp4"
        break;
      case 'avi':
        fileTypeBlob = "video/x-msvideo"
        break;
      default:
        fileTypeBlob = "";
    }
    return fileTypeBlob;
  },
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值