后端接口返回二进制数据流,前端如何将其转换成对应的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 并自行下载。

相关推荐
速盾cdn29 分钟前
速盾:网页游戏部署高防服务器有什么优势?
服务器·前端·web安全
小白求学131 分钟前
CSS浮动
前端·css·css3
什么鬼昵称32 分钟前
Pikachu-csrf-CSRF(POST)
前端·csrf
Spider Cat 蜘蛛猫43 分钟前
关于vscode中settings.json中的设置
vscode·json·eslint
golitter.1 小时前
Vue组件库Element-ui
前端·vue.js·ui
golitter.1 小时前
Ajax和axios简单用法
前端·ajax·okhttp
雷特IT2 小时前
Uncaught TypeError: 0 is not a function的解决方法
前端·javascript
长路 ㅤ   2 小时前
vite学习教程02、vite+vue2配置环境变量
前端·vite·环境变量·跨环境配置
亚里士多没有德7752 小时前
强制删除了windows自带的edge浏览器,重装不了怎么办【已解决】
前端·edge
micro2010142 小时前
Microsoft Edge 离线安装包制作或获取方法和下载地址分享
前端·edge