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

目录

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

一、关于二进制流

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

二进制文件可以包含任意类型的数据,例如:图像、音频、视频、可执行文件、压缩文件等,而文本文件则仅仅包含 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://xiahunao.cn/news/2980748.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Prompt Engineering,提示工程

什么是提示工程? 提示工程也叫【指令工程】。 Prompt发送给大模型的指令。比如[讲个笑话]、[用Python编个贪吃蛇游戏]、[给男/女朋友写情书]等看起来简单,但上手简单精通难 [Propmpt]是AGI时代的[编程语言][Propmpt]是AGI时代的[软件工程][提示工程]是…

Pytorch常用的函数(八)常见优化器SGD,Adagrad,RMSprop,Adam,AdamW总结

Pytorch常用的函数(八)常见优化器SGD,Adagrad,RMSprop,Adam,AdamW总结 在深度学习中,优化器的目标是通过调整模型的参数,最小化(或最大化)一个损失函数。 优化器使用梯度下降等迭代方法来更新模型的参数,以使损失函数…

C#仿QQ抽屉式窗体的设计方法:创建特殊窗体

目录 1.WindowFromPoint函数 2.GetParent函数 3.实例 (1) 图片集合编辑器 (2)Form1.Designer.cs (3)Form1.cs 4.生成效果 QQ软件对于绝大多数的人来说再熟悉不过了,它以使用方便、界面美…

MySQL创建数据库与表

要求: 1.在本机安装数据库 2.创建一个数据库db_classes 3.创建一行表db_hero 4.将四大名著中的常见人物插入这个英雄表 目录 要求: 过程: 结果: 命令总结: 过程: 1.安装数据库 http://t.csdnimg…

【软件工程】【第一章概述】d1

关键字: 什么是软件、软件危机、软件工程定义、软件生命周期、软件过程、瀑布模型

设计模式学习笔记 - 开源实战四(中):剖析Spring框架中用来支持扩展的设计模式

概述 上篇文章,学习了 Spring 框架背后蕴含的设计思想,比如约定优于配置、低侵入松耦合、模块化轻量级等等。这些设计思想可以借鉴到其他框架开发中,在大的设计层面提高框架的代码质量。 除了上篇文章降到的设计思想,实际上&…

《R语言与农业数据统计分析及建模》学习——ggplot2绘图基础

一、农业科研数据可视化常用图形及用途 1、数据可视化的重要性 通过可视化,我们可以更直观地理解和分析数据的特征和趋势。 2、常用图表类型及其概述 散点图:用于展示两个变量之间的关系,可用于观察数据的分布、趋势和异常值。 折线图&…

[SWPUCTF 2022 新生赛]1z_unserialize

function __destruct()这是类的析构函数。在 PHP 中,析构函数会在对象被销毁时自动调用。 $a($this->lly): 将 $this->lly 的值作为参数传递给 $a 所代表的函数。 由题目可知,实现nss反序列化的同时,会触发__destruct()的魔术方法将l…

【数据结构(邓俊辉)学习笔记】向量03——常规向量

文章目录 0.概述1.元素访问2.置乱器3.判等器与比较器4.无序查找4.1 判等器4.2 顺序查找4.3 实现4.4 复杂度 5. 插入5.1 算法实现5.2 复杂度分析 6. 删除6.1 区间删除6.2 单元删除6.3 复杂度 7. 唯一化7.1 实现7.2 正确性7.3 复杂度 8. 遍历8.1 实现8.2 复杂度 9. 总结 0.概述 …

【树莓派学习】开发环境配置

【树莓派学习】开发环境配置 ​ Raspberry Pi OS作为基于Linux的系统,其默认网络配置在国内的网络环境下容易出现访问慢甚至无法连接等问题,不便于我们的学习,同时,树莓派上C/C的使用需要单独安装WiringPi。本文主要介绍如何更改…

探索开源的容器引擎--------------Docker容器操作

目录 一、Docker 容器操作 1.1容器创建 1.2查看容器的运行状态 1.3启动容器 1.4创建并启动容器 1.4.1当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是: 1.4.2在后台持续运行 docker run 创建的容器 1.4.3创建容器并持续运行容器…

PYTHON用[邻接列表]及[邻接矩阵]来存储无向图

# 图可以根据边的性质进行分类:# 有向图(Directed Graph):在有向图中,边是有方向性的,从一个节点指向另一个节点。这意味着从节点 A 到节点 B 的边与从节点 B 到节点 A 的边可以是不同的,或者根…

parallels desktop19出来了吗?2024最新版本有哪些新功能

Parallels Desktop 19已经发布。以下是关于Parallels Desktop 19的相关信息: 发布时间:Parallels Desktop 19是在近期发布的一款虚拟机软件,具体发布时间为2023年下半年。 功能特点: 针对搭载苹果芯片的Mac进行了优化&#xff0c…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具:uniapp开发小程序 1.3原型图 功能:.点击体验官带看跳转小程序的体验官带看页面 功能:点击立即咨询唤起小程序弹窗打电话 2.…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 一、简单介绍 二、简单进行车牌检测和识别实现原理 …

Jmeter之Beanshell详解

一、 Beanshell概念 Beanshell: BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性…

[Algorithm][前缀和][模板 一维前缀和][模板 二维前缀和][寻找数组中心下标][除自身以外数组的乘积] + 前缀和原理 + 前缀和模板

目录 0.原理讲解1.[模板]一维前缀和1.题目链接2.模板代码实现 2.[模板]二维前缀和1.题目链接2.算法原理讲解3.模板代码实现 3.寻找数组的中心下标1.题目链接2.算法原理详解3.代码实现 4.除自身以外数组的乘积1.题目链接2.算法原理详解3.代码实现 0.原理讲解 前缀和:…

Esp8266 - USB开关分享(开源)

文章目录 简介推广自己gitee项目地址:嘉立创项目地址:联系我们 功能演示视频原理图嘉立创PCB开源地址原理图PCB预览 固件烧录代码编译烧录1. 软件和驱动安装2. 代码编译1. 安装所需要的依赖库文件2. 下载源代码3. 烧录代码 使用说明1. 设备配网2. 打开设备操作页面3…

【深度学习】YOLOv5,烟雾和火焰,目标检测,防火检测,森林火焰检测

文章目录 数据收集和数据标注查看标注好的数据的脚本下载yolov5创建 dataset.yaml训练参数开始训练yolov5n训练训练后的权重下载gradio部署 数据收集和数据标注 搜集数据集2w张。 pip install labelme labelme 然后标注矩形框和类别。 下载数据请看这里: https:…

【SpringCloud】Consul-服务注册中心及配置中心快速入门

【SpringCloud】Consul-服务注册中心及配置中心快速入门 文章目录 【SpringCloud】Consul-服务注册中心及配置中心快速入门1. 下载安装及启动2. 服务注册2.1 引入依赖2.2 yml配置2.3 启动类配置2.4 测试 3. 服务配置3.1 引入依赖3.2 yml配置3.3 创建配置文件3.4 动态刷新配置3.…