位置: IT常识 - 正文

js将后端返回的文件流导出为excel,并自定义下载文件名(js返回上一步操作)

编辑:rootadmin
js将后端返回的文件流导出为excel,并自定义下载文件名 一. 需求

推荐整理分享js将后端返回的文件流导出为excel,并自定义下载文件名(js返回上一步操作),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:后端返回前端json,后端返回前端json,js 后端,js将后端返回的json行转列,js获取后端返回的数据,后端返回的json数据怎么处理,后端返回前端json,后端返回前端json,内容如对您有帮助,希望把文章链接给更多的朋友!

后台管理系统,常会出现导出excel表格功能;点击导出按钮,请求后端接口,需要将接口返回的文件流导出为excel,实现前端下载excel文件。 但是,返回的数据获取 response 时出现乱码,如图:

二. 实现思路调用后端下载接口,获取传递过来的二进制数据流创建<a>标签创建下载链接;将Blob对象转化为一个URL资源地址,这个地址是一个本地地址将a标签添加到body中添加点击事件,进行下载下载完成后移除a标签三. 了解概念

在写代码之前,先来了解几个概念。当然也可以跳过这部分,直接看代码。

1)responseType responseType 的作用就是设置ajax数据响应的类型,你告诉服务器,让服务器返回什么样的数据类型给你 服务器响应的数据类型,可以是 arraybuffer, blob, document, json, text, stream,默认是’json’

2)Blob() 构造函数 Blob() 构造函数文档

Blob() 构造函数返回一个新的 Blob 对象,blob 的内容由参数数组中给出的值的串联组成。(通俗点说,Blob对象可以看做是一个存储二进制数据的容器)

语法:

var aBlob = new Blob( array, options );

参数:

array 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。options 是一个可选的,它可能会指定如下两个属性: 1)type,默认值为 “”,它代表了将会被放入到 blob 中的数组内容的 MIME 类型。比如:type: ‘application/x-excel’ 或 type: ‘text/plain’ 2)endings,默认值为"transparent",用于指定包含行结束符\n的字符串如何被写入。它是以下两个值中的一个:“native”,代表行结束符会被更改为适合宿主操作系统文件系统的换行符,或者 “transparent”,代表会保持 blob 中保存的结束符不变 非标准js将后端返回的文件流导出为excel,并自定义下载文件名(js返回上一步操作)

示例:

var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一个包含 DOMString 的数组var MyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob对象console.log(MyBlob, 'MyBlob')

打印结果:

3)URL.createObjectURL() 官方文档介绍 URL.createObjectURL()

通过创建URL对象指定文件的下载链接。

语法:

objectURL = URL.createObjectURL(object);//参数object:用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象。​//返回值:包含了一个对象 URL,该 URL 可用于指定源 object的内容。

示例:

const aFileParts = ['<a id="a"><b id="b">hey!</b></a>'] // 一个包含 DOMString 的数组 const MyBlob = new Blob(aFileParts, { type: 'text/html' }) // 得到 blob const objectURL = window.URL.createObjectURL(MyBlob) // 创建新的URL表示指定的File对象或者Blob对象。 console.log(objectURL, 'objectURL') window.URL.revokeObjectURL(objectURL); // 释放内存

打印结果:

注意内存管理

在每次调用 createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法来释放。 浏览器在 document 卸载的时候,会自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。

四. 代码实现

在src/utils下新建tool.js(代码如下),封装成一个方法暴露出去,方便其他页面调用。

import XEUtils from 'xe-utils'export function exportCsv(csv:any, title:string) { const t = XEUtils.toDateString(Date.now(), 'yyyy-MM-dd') // 当前日期 const filename = `${t + title}.csv` // 拼接文件名 const blob = new Blob([csv]) //创建一个新的 Blob 对象 const url = window.URL.createObjectURL(blob) // 把一个blob对象转化为一个Blob URL,创建下载链接 const downloadLink = document.createElement('a') // 生成一个a标签 downloadLink.href = url downloadLink.download = filename // // dowload属性指定下载后文件名 document.body.appendChild(downloadLink) //将a标签添加到body中 downloadLink.click() // 点击下载 document.body.removeChild(downloadLink) // 下载完成后移除元素 window.URL.revokeObjectURL(url); // 释放掉blob对象}

其次就是 调用接口了 在调用接口 封装了 axios 所以 在请求后台接口时,要在请求头上要注意加上 responseType: 'blob'

import request from '@/request/http.ts'GETMONEYLISTDOWN({ // 资金记录导出接口 page = 0, size = 10, }) { return request({ method: 'post', responseType: 'blob', //注意 需要规定后台返回文件流格式 data: Object.assign( { page, pagesize: size, method: 'Money.Moneylist' }, tokenQuery() ) }) },// 页面调用import { exportCsv } from '@/utils/tool.ts'function downLoad(e) { tableLoading.value = true const params = Object.assign(apiParams, e) moneyApi.GETMONEYLISTDOWN(Object.assign({}, params)).then(res => { // 传入二进制流data和文件名 exportCsv(res.data, '资金记录') tableLoading.value = false }).catch(error => { tableLoading.value = false console.log(error) })}

可参考: excel导出-将后端返回的文件流导出为excel

本文链接地址:https://www.jiuchutong.com/zhishi/295371.html 转载请保留说明!

上一篇:el-switch(el-switch右对齐)

下一篇:【Vue3】发送post请求出现400 Bad Request 报错(vue发送post请求如何传两个参数)

  • 团队不熟悉的新业务应该怎么样快速开展?(大部分团队成员不熟悉的一项新技术)

    团队不熟悉的新业务应该怎么样快速开展?(大部分团队成员不熟悉的一项新技术)

  • 海底捞的成功秘诀,卖的既不是火锅也不是服务(海底捞的成功秘诀在于没有缺点)

    海底捞的成功秘诀,卖的既不是火锅也不是服务(海底捞的成功秘诀在于没有缺点)

  • ps照片蓝底换成白底怎么换(ps照片蓝底换成白底软件)

    ps照片蓝底换成白底怎么换(ps照片蓝底换成白底软件)

  • 荣耀录音功能在哪里开(荣耀手机录音在哪儿)

    荣耀录音功能在哪里开(荣耀手机录音在哪儿)

  • 小米9上市时间(小米10pro什么时候上市)

    小米9上市时间(小米10pro什么时候上市)

  • 华为mate30pro铃声怎么下载(华为mate30pro铃声设置无效)

    华为mate30pro铃声怎么下载(华为mate30pro铃声设置无效)

  • iphone11无法面部识别(苹果11无法面部识别)

    iphone11无法面部识别(苹果11无法面部识别)

  • u盘格式化后数据能恢复吗(u盘格式化后数据怎么恢复免费)

    u盘格式化后数据能恢复吗(u盘格式化后数据怎么恢复免费)

  • 苹果11有256G吗(苹果11256g二手卖多少钱)

    苹果11有256G吗(苹果11256g二手卖多少钱)

  • 脚注和尾注有什么区别(脚注和尾注有什么用)

    脚注和尾注有什么区别(脚注和尾注有什么用)

  • 换数据线会影响闪充吗(换数据线会影响快充吗)

    换数据线会影响闪充吗(换数据线会影响快充吗)

  • pree中文是什么意思(preserve中文意思是什么)

    pree中文是什么意思(preserve中文意思是什么)

  • 借的爱奇艺vip怎样登录(借的爱奇艺vip怎样登录手机)

    借的爱奇艺vip怎样登录(借的爱奇艺vip怎样登录手机)

  • 通过支付宝收款码可以找到人吗(通过支付宝收款码能查到电话号码吗)

    通过支付宝收款码可以找到人吗(通过支付宝收款码能查到电话号码吗)

  • 苹果耳机进水了还能用吗(苹果耳机进水了怎么处理比较好)

    苹果耳机进水了还能用吗(苹果耳机进水了怎么处理比较好)

  • qq音乐下载的歌曲怎么导入u盘(qq音乐下载的歌曲怎么转换mp3)

    qq音乐下载的歌曲怎么导入u盘(qq音乐下载的歌曲怎么转换mp3)

  • 在微机中1gb的准确值等于(在微机中,1gb的准确值等于____)

    在微机中1gb的准确值等于(在微机中,1gb的准确值等于____)

  • 拼多多推荐商品怎么删(怎么删除拼多多推荐商品)

    拼多多推荐商品怎么删(怎么删除拼多多推荐商品)

  • 计价器时间不准怎样调(计价器时间不准在不在鉴定规程内)

    计价器时间不准怎样调(计价器时间不准在不在鉴定规程内)

  • vivox27面部识别在哪里(vivo手机面部识别)

    vivox27面部识别在哪里(vivo手机面部识别)

  • qq怎么关闭兴趣部落(新版本qq兴趣爱好关闭在哪里)

    qq怎么关闭兴趣部落(新版本qq兴趣爱好关闭在哪里)

  • 苹果iphone6s Plus怎么关闭应用推送通知(苹果iphone6s plus打电话没有人名)

    苹果iphone6s Plus怎么关闭应用推送通知(苹果iphone6s plus打电话没有人名)

  • 联想ThinkPad L380 笔记本Windows10系统改Windows7系统的(联想thinkpad l380yoga)

    联想ThinkPad L380 笔记本Windows10系统改Windows7系统的(联想thinkpad l380yoga)

  • TS 快速入门(ts基础)

    TS 快速入门(ts基础)

  • 通往海滩的木板路,德国叙尔特岛 (© Kerstin Bittner/Westend61/Offset by Shutterstock)(通往海滩的木板有什么用)

    通往海滩的木板路,德国叙尔特岛 (© Kerstin Bittner/Westend61/Offset by Shutterstock)(通往海滩的木板有什么用)

  • html+css唯美登录页面,代码提供(效果展示)(html+css登录页面)

    html+css唯美登录页面,代码提供(效果展示)(html+css登录页面)

  • 回购股票为什么股价下跌
  • 代开普通发票需提供哪些材料
  • 外资企业是否属于公有制经济
  • 分期付款购买商品的会计分录
  • 管理会计期末存货计算公式
  • 政府单位临聘人员辞退
  • 林业一般纳税人的税率是多少?
  • 未确认融资费用计算公式
  • 股东个人为公司付的钱
  • 国有资产转让房产
  • 外企缴纳社保
  • 代采账务处理
  • 车购税退税需要多长时间
  • 航天金穗服务费抵扣
  • 补发以前年度工资如何计税
  • 货币的时间价值名词解释
  • 发票边上的虚线是什么
  • 单位没车能用停车票不能用加油票吗?
  • 一般纳税人能否享受残保金优惠
  • 小规模纳税人可以开9%专票吗
  • 发票备注有法律效力吗
  • 不计提盈余公积可以分红吗
  • 通用机打发票属于什么发票
  • 公司招投标卖标书的收入款财务作什么科目?
  • 偿还借款利息是现金流量什么项目
  • 零星工程实施流程
  • 劳务公司如何确定收入
  • 进项转出税务处理
  • win10专业版虚拟内存怎么设置
  • 最新气象报告
  • 税收返还的账务处理
  • 营改增后建筑业怎么开票
  • qtzgacer.exe - qtzgacer进程是什么文件 .作用是什么
  • PHP:apache_response_headers()的用法_Apache函数
  • php数组函数 菜鸟
  • 增值税最高开票限额审批时限
  • 发票已到货未到会计处理
  • fsacder2e是什么文件夹
  • 回迁安置房是否有产权
  • 猪肉税票怎么开
  • chat p
  • node-js
  • 目标检测yolo算法
  • 分公司要不要银行开户
  • mysql事务性能
  • mysql事务引擎
  • 织梦图片要放哪里
  • 社保次月几号生效
  • 开一般户需要基本户开户许可证吗
  • 合营企业和联营企业构成关联方吗
  • sql server的数据库
  • 企业取得投资收益要交税吗
  • 市政绿化工程的施工方案
  • 建筑公司预收工程款
  • 汇算清缴利润调增70万会预警吗
  • 去年亏损今年盈利同比怎么算
  • 加权平均净资产收益率公式
  • 分月摊销怎么处理
  • 企业所得税汇算清缴调增的项目有哪些
  • 销户还能申请抚养费吗?
  • Win10应用商店下载错误
  • win10系统优酷播放不了
  • ubuntu 125%
  • windowsxpwifi
  • win7关闭操作中心图标
  • 各种linux系统比较
  • 一、Unity3D 5.0.1-示例项目“汽车游戏”的展示及开发准备
  • opengl环境光
  • bat删除所有文件
  • linux rsync命令详解
  • 深入理解java
  • nodejs如何安装
  • 如何用python开发软件
  • python截屏幕的图
  • 简单谈谈你对中国国防建设的认识
  • 选择排序图解过程
  • 厦门增值税发票查验
  • 浪潮报销软件安装
  • 财税公司工资怎么样
  • 各种税务申报时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设