Vue 学习随笔系列二十 -- 文件下载

devtools/2025/3/6 18:19:43/

文件下载

文章目录

  • 文件下载
    • 一、前端插件下载
    • 二、后端下载
      • 1、拿到文件地址进行下载
      • 2、后端返回二进制流下载
      • 3、使用 FileSaver 下载


一、前端插件下载

import XLSX from 'xlsx';
import XLSXS from "xlsx-style"
import FileSaver from 'file-saver'export const export_json_to_excel = ({data,key,title,filename,autoWidth
}) => {const wb = XLSX.utils.book_new();data.unshift(title);const ws = XLSX.utils.json_to_sheet(data, {header: key,skipHeader: true});if (autoWidth) {const arr = json_to_array(key, data);auto_width(ws, arr);}XLSX.utils.book_append_sheet(wb, ws, filename);XLSX.writeFile(wb, filename + '.xlsx');
}

引入

	let titles = [{ title: "xxxxx", key: "xxxxx" },{ title: "xxxxx", key: "xxxxx" },{ title: "xxxxx", key: "xxxxx" },{ title: "xxxxx", key: "xxxxx" },{ title: "xxxxx", key: "xxxxx" },{ title: "xxxxx", key: "xxxxx" },]const params = {multiHeader: [multiHeader],header: titles,key: keys,data: excelData,merges: ["P1:S1", "T1:W1", "X1:AA1", "AB1:AE1"],autoWidth: true,filename: "签约转售中项目",};excel.export_json_to_excel_more_title(params);

二、后端下载

1、拿到文件地址进行下载

window.location.href = util.baseUrl + "api/download/" + 'xxxx文件名';
window.open(`url`);
saveAs('https://xxxxx/xxxx.xlsx')

2、后端返回二进制流下载

创建公共方法

// 文件下载并创建点击事项
export const downloadMethod = ({ content, fileName }) => {const blob = new Blob([content])if ('download' in document.createElement('a')) {const a = document.createElement('a')a.download = fileNamea.style.display = 'none'a.href = URL.createObjectURL(blob)document.body.appendChild(a)a.click()URL.revokeObjectURL(a.href)document.body.removeChild(a)this.$message.success('导出成功')} else {navigator.msSaveBlob(blob, fileName)this.$message.success('导出成功')}
}export const exportFunc = ({ url, params, fileName }) => {this.$message.info('正在导出,请稍等')const temp = qs.stringify(params, { indices: false })util.http({method: 'GET', url: `${url}?${temp}`, data: {}, responseType: 'blob'}).then(res => {console.log(111, res)const tempFileName = fileName || res?.headers?.['content-disposition']?.split(';fileName=')?.[1] || ''downloadMethod({ content: res.data, fileName: tempFileName })}).catch(errorData => {const reader = new FileReader();  //创建一个FileReader实例reader.readAsText(errorData, 'utf-8'); //读取文件,结果用字符串形式表示reader.onload = () => {//读取完成后,**获取reader.result**const result = JSON.parse(reader.result);this.$message.error(result.title || '导出失败,请重试')}})
}

在main.js中引入

// 公共方法所在文件路径
import { exportFunc } from "./api/xxxxx";
Vue.prototype.$exportFunc = exportFunc;

在页面中使用下载方法

exportExcel () {const flag = this.$refs.QueryBox.valid()if (!flag) returnthis.$exportFunc({url: '/api/xxxxx/xxxxx',params: this.getParams(),fileName: 'xxxxxx报表.xlsx'})},

3、使用 FileSaver 下载

引入 file-saver 插件

// 安装插件
npm install file-saver --save
// 在使用的页面引入
import FileSaver from "file-saver";
    async generateAndExport () {if (!this.tableData.length) {this.$message.warning("暂无数据生成并导出!");return;}this.loading = true;try {let params = { id: this.row.id }let result = await exportData(params );const fileName = 'xxxxx.xlsxFileSaver.saveAs(result, fileName); } finally {this.loading = false;}},

// 注意后端接口的封装 要添加 responseType: ‘blob’

export const exportData= (params) => {return new Promise((resolve, reject) => {request(`xxxxxx?Id=${params.id}`, params, 'get', { responseType: 'blob'}).then(res => {resolve(res)}).catch(err => {reject(err)})})
}

http://www.ppmy.cn/devtools/165051.html

相关文章

数据库原理与使用基础教程

数据库原理与使用基础教程 大纲 数据库基础概述 什么是数据库?数据库管理系统(DBMS)概述数据库的类型数据库模型与结构 关系型数据库 关系型数据库简介表(Table)、字段(Field)、记录&#xff…

【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理

华为w515麒麟芯片版,还有非麒麟芯片版本,是一款信创电脑,一般安装的UOS系统。 准备一个空U盘,先下载镜像文件及启动盘制作工具,连接如下: 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…

Vue 与 Nuxt 的区别

Nuxt 实现服务端渲染SSR Nuxt.js 是基于 Vue.js 的一个框架,它为构建 Vue.js 应用提供了更高级的功能和更便捷的开发体验。 一、定位与功能 Vue.js 是一个前端 JavaScript 框架,专注于构建用户界面和单页应用(SPA)。 核心功能…

在 Linux 系统中查看 Tomcat 日志

在 Linux 系统中查看 Tomcat 日志,主要通过命令行工具定位日志文件并分析内容。以下是具体方法及常用命令: 一、定位 Tomcat 日志路径 Tomcat 日志通常位于安装目录的 logs 子目录下,常见日志文件包括: • catalina.out&#xf…

数据结构预算法-图论- 最小生成树-prim and kruskal

基础文字知识 最小生成树(Minimum Spanning Tree,MST)是图论中的一个重要概念,以下是关于它的详细介绍: 定义 在一个无向连通加权图中,最小生成树是一棵包含图中所有顶点,且边的权值之和最小的…

分库分表 MyBatis的拦截器(Interceptor)在 SQL 执行前动态修改表名

一、定义拦截器 import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins…

【C++设计模式】第一篇:单例模式(Singleton)​

注意:复现代码时,确保 VS2022 使用 C17/20 标准以支持现代特性。 确保全局唯一实例的线程安全实现 1. 模式定义与用途​ 核心目标:保证一个类仅有一个实例,并提供全局访问点。 常见场景: 日志系统(避免多…

Ubuntu20.04 在离线机器上安装 NVIDIA Container Toolkit

步骤 1.下载4个安装包 Index of /nvidia-docker/libnvidia-container/stable/ nvidia-container-toolkit-base_1.13.5-1_amd64.deb libnvidia-container1_1.13.5-1_amd64.deb libnvidia-container-tools_1.13.5-1_amd64.deb nvidia-container-toolkit_1.13.5-1_amd64.deb 步…