前端实现将二进制文件流,并下载为excel文件

embedded/2024/11/9 0:53:15/

目录

  • 一、关于二进制流
  • 二、项目实践
  • 三、常见问题及解决

一、关于二进制流

  • 含义:二进制流是一种计算机文件格式,它的数据以二进制形式存储,与文本文件不同。

二进制文件可以包含任意类型的数据,例如:图像、音频、视频、可执行文件、压缩文件等,而文本文件则仅仅包含 ASCII 码或其他编码的字符数据。

  • 常见的: Blob、ArrayBuffer、File、FileReader 和 FormData

  • 在浏览器中的样子如下:
    在这里插入图片描述

二、项目实践

1、导入excel方法代码片段

// 导入时,接口调用,失败后得到文件流
axios(url, {method: 'post',responseType: 'blob',url: '/api/import',data: formData, // 导入文件一般都用FormData 格式数据
}).then(res => {if(res.code === 200) {// 导入成功} else {// 导入失败,需要将返回的文件流res.data进行转换this.downloadBinaryFile(res.data, '导入失败后下载的报错文件')}
})

2、二进制文件流转换成excel方法实现

/*** 将二进制文件下载到本地,保存为excel文件* @param {*} binFile 二进制文件流* @param {*} fileName 下载后的文件名* @param {*} blobType 文件格式*/
downloadBinaryFile(binFile, fileName, blobType="application/vnd.ms-excel") {const blobObj = new Blob([binFile], { type: blobType });const downloadLink = document.createElement('a');let url = window.URL || window.webkitURL || window.moxURL; // 浏览器兼容url = url.createObjectURL(blobObj);downloadLink.href = url;downloadLink.download = fileName;document.body.appendChild(downloadLink);downloadLink.click();document.body.removeChild(downloadLink);window.URL.revokeObjectURL(url);
}

参数说明:

  • blobType 指的是服务端返回的Content-Typemine-type,常用的excel类型一般有2种:"application/vnd.ms-excel""application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    例如:
    在这里插入图片描述

三、常见问题及解决

问题:成功将文件流转换成了excel文件,并下载了,但是下载后的文件打不了!

原因:就是在上传文件调用服务端接口时,axios请求缺少:responseType: 'blob', 这个很重要!
在这里插入图片描述

responseType 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'

  • arraybuffer:设置响应类型为二进制对象(返回的是一个包含二进制数据的 JavaScript ArrayBuffer 类型化数组)。

  • blob:设置响应类型为二进制对象(返回的是一个包含二进制数据的 Blob 对象)。

  • document: 设置响应类型为html document 或 xml document,具体根据接收到的数据的 MIME 类型而定。

  • json: 设置响应类型为json类型,日常开发中常用。

  • text:设置响应类型为text文本类型


http://www.ppmy.cn/embedded/23862.html

相关文章

数据结构之顺序表深度讲解

从这节课开始就要进入数据结构的课了,小伙伴们,你们准备好了吗?系好安全带,我们要发了。 顺序表的引入 概念 相互存在一种或多种特定关系的数据元素的集合 大白话:一个结构体包含了一些数据元素 概念不重要&#x…

Docker深入探索:网络与资源控制、数据管理与容器互联以及镜像生成

目录 一、 Docker网络 (一)Docker网络实现原理 (二)Docker网络模式 1. Bridge网络(默认) 2. Host网络 3. None网络 4. Container网络 5. 自定义网络 二、资源控制 (一)cgr…

Nacos的介绍和使用Docker、MySQL持久化挂载安装

文章目录 Nacos的介绍和使用Docker、MySQL持久化挂载安装一、Nacos的介绍二、使用Docker和MySQL进行持久化安装1、选择想要使用的MySQL服务器,创建一个数据库nacos-config,然后运行下面sql2、在linux下的opt文件夹下创建 /opt/nacos/data文件夹 和 /opt/…

吴恩达2022机器学习专项课程(一)7.2 逻辑回归的简化成本函数

问题预览/关键词 本节课内容逻辑回归的损失函数简化之后的形式是?为什么可以简化?成本函数的通用形式是?逻辑回归成本函数的最终形式是?逻辑回归为什么用对数损失函数计算成本函数?为什么不直接给出逻辑回归损失函数的…

Mysql基础(三)DDL之create table语句

一 create table 创表 说明: create table相关语句从功能上进行讲解补充: 前面已经讲解过相关的约束,已进行相关的铺垫声明: 参考价值较少,了解即可 ① 基本语法 思考: 约束加在哪里? ② 创建新表 强调:使…

基于单片机的机械臂运行轨迹在线控制系统设计

摘要:基于PLC的机械臂运行轨迹控制系统通过PLC采集现场信号及输出信号的状态变化实现机械臂运行轨迹的控制,不能实现多自由度机械臂控制。设计基于单片机的机械臂运行轨迹在线控制系统,系统硬件由上位机PC在线控制、主控制板和机械臂舵机控制板构成,通过光电编码器位移传感…

区块链技术与应用学习笔记(5-7节)——北大肖臻课程

​ 目录 ​BTC实现 基于交易的账本模式: UTXO集合: 交易费用: BTC网络 1.应用层: 2.网络层: 3传播层: 什么是鲁棒? BTC挖矿: 出块奖励: 挖矿难度调整&#…

如何评判一个算法的好坏,你知道吗

算法的评价指标通常包括以下几个方面: 1. **时间复杂度**:评估算法执行所需时间的量度,通常用大O符号表示。它描述了随着输入数据规模增长,算法执行时间的增长速度。 2. **空间复杂度**:评估算法执行所需存储空间的量度,也用大O符号表示。它描述了随着输入数据规模增长,…