随笔 - 38  文章 - 0 评论 - 3 阅读 - 28020
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

一、通过url-loader插件

对于保存在项目中的文件,实现直接下载该文件至本地。

对这个插件的具体理解可以查看别的网上介绍:

这里直接上代码

  1. 修改vue.config.js配置
// 我的项目是webpack + vue,所以在vue.config.js文件中修改配置
configureWebpack: {
  module: {
    rules: [{
      test: /\.xlsx$/,
      use: [{
        loader: "url-loader",
        options: {
          name: 'files/[name].[ext]'// 命名生成的文件名称
        }
      }]
    }]
  },
}

  1. 代码中使用下载功能或者说直接引入文件

场景1

import myFile from "@/assets/doc/test.xlsx"; // 直接引入文件对象,可以用在引入图片的场景

场景2

<a :href="require('@/assets/doc/test.xlsx')" download="模板文件">下载文件</a>

二、通过完整url链接下载文件

通过模拟接口请求实现,这样就支持在请求头部加入自定义配置了(有些场景需要通过鉴权后才允许下载,要带上鉴权的信息)。

// 定义下载的方法
function downloadFile(url, fileName) {
  // 创建XMLHttpRequest对象
  var xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);
  xhr.setRequestHeader('Authorization', "token信息")
  xhr.responseType = 'blob';

  // 注册事件监听函数
  xhr.onload = () => {
    if (xhr.status === 200) {
      // 成功获取文件
      var blob = xhr.response;
 
      // 创建a标签,用于下载该文件
      var a = document.createElement('a');
      a.href = window.URL.createObjectURL(blob);
      a.download = fileName;
      a.style.display = 'none';
      document.body.appendChild(a);
      a.click();

      // 释放资源
      window.URL.revokeObjectURL(a.href);
      document.body.removeChild(a);
    } else {
       // 获取文件失败
       console.log('Failed to download file');
    }
  };

  // 发送请求
  xhr.send();
}

// 调用方法执行
const url = "http://xxxxxxx";
const fileName = "这是下载的文件名称";
downloadFile(url, fileName);
posted on   ╰透在骨子里的小傲娇  阅读(199)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示

目录