后端接口返回二进制数据流,前端如何将其转换成对应的excel、csv和json文件格式并下载

本文主要是介绍在工作中遇到的后端接口返回一个二进制数据流,前端在界面上创建下载按钮并下载成对应格式的文件导出。

java 复制代码
downloadData({
	start: startTime,
	end: endTime,
	exportType: 0, // 0-excel, 1-csv, 2-json
}).then((res) => {
	download(res, startTime, endTime, exportType);
})

接口会返回一个二进制数据流,如下图所示。

startTimeendTime 是用来构建文件名字,exportType 是用来确定导出文件格式后缀的。

根据对应的按钮获取对应文件,并由浏览器进行下载。

java 复制代码
const download = (res: any, startDate: any, endDate: any, exportType: any) => {
    const blob = new Blob([res])
    let filename = "";
    let startPrefix = new Date(startDate);
    let endPrefix = new Date(endDate);
    // 起名
    let date = startPrefix.getFullYear().toString() + 
    	(startPrefix.getMonth() + 1 < 10 ? '0' + 
    	(startPrefix.getMonth() + 1) : startPrefix.getMonth() + 1) +
        startPrefix.getDate().toString() + '-' + 
        endPrefix.getFullYear().toString() + 
        (endPrefix.getMonth() + 1 < 10 ? 
        '0' + (endPrefix.getMonth() + 1) : 
        endPrefix.getMonth() + 1) + endPrefix.getDate().toString();

	// 判断后缀
    if (exportType=== 0) filename = date + '.json';
    else if (exportType === 1) filename = date + '.xlsx';
    else filename = date + '.csv';

    if (typeof window.navigator.msSaveBlob !== 'undefined') {
        window.navigator.msSaveBlob(blob, filename);
    } else {
    	// 导出
        const url: any = window.URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.style.display = 'none';
        link.href = url;
        link.setAttribute('download', filename);
        document.body.appendChild(link);
        link.click();
        URL.revokeObjectURL(url.href);
        document.body.removeChild(link);
    }
}

导出主要是通过创建一个 url 并自行下载。

相关推荐
融化的雪3 分钟前
reactflow整理节点,尾节点位置的大坑
开发语言·前端·javascript
Gazer_S15 分钟前
【理解React Hooks与JavaScript类型系统】
前端·javascript·react.js
鹏多多15 分钟前
前端IndexedDB数据库高效管理插件localForage的教程+案例
前端·javascript·vue.js
我血条子呢21 分钟前
[HTML]播放wav格式音频
前端·html·音视频
CodeSheep37 分钟前
大家有没有发现一个奇特现象:你能在一个公司工作 12 年以上,无论你多忠诚多卖力,一旦公司赚的少了,那你就成了“眼中钉肉中刺”
前端·后端·程序员
亿元程序员42 分钟前
你知道三国志战略版的地图是怎么实现的吗?
前端
Rewloc1 小时前
IntelliJ IDEA 打包 Web 项目 WAR 包(含 Tomcat 部署+常见问题解决)
前端·tomcat·intellij-idea
devii661 小时前
120html
前端
.生产的驴1 小时前
React useEffect组件渲染执行操作 组件生命周期 监视器 副作用
前端·css·react.js·ajax·前端框架·jquery·html5
峥无1 小时前
HTML 零基础入门到实战:从骨架到页面的完整指南
前端·html