文件下载-前端发请求后端返回二进制文件

1.前端发请求(axios为例)

request({url: "/export",method: 'post',responseType: 'blob',data: data}).then((response) => {debuggerif (response.type === 'application/json') {alert("设置时间或当前时间暂无数据");} else {const blob = response;const downloadLink = document.createElement('a');downloadLink.href = window.URL.createObjectURL(blob);downloadLink.download = fileName;downloadLink.click();window.URL.revokeObjectURL(downloadLink.href); // Clean up the URL object}}).catch((error) => {console.error('请求失败:', error);});

2.详细解释

2.1说明

说明:发送一个 POST 请求到 /export 接口,并处理响应内容,响应内容可能是一个二进制文件(blob)

2.2处理响应部分

.then((response) => {debuggerif (response.type === 'application/json') {alert("设置时间或当前时间暂无数据");} else {const blob = response;const downloadLink = document.createElement('a');downloadLink.href = window.URL.createObjectURL(blob);downloadLink.download = fileName;downloadLink.click();window.URL.revokeObjectURL(downloadLink.href); // 清理URL对象}
})
  • then 方法用来处理请求成功后的响应。response 是服务器返回的数据。
  • debugger 会在开发者工具中暂停代码执行,便于调试。
  • 判断响应类型:
    • 如果 response.type === 'application/json',说明服务器返回的是 JSON 数据(而不是文件)。此时,弹出一个提示框 alert("设置时间或当前时间暂无数据"),提示用户当前没有可下载的数据。
    • 否则,表示服务器返回的是一个文件(二进制数据)。
  • 处理文件下载:
    • const blob = response; 将服务器返回的二进制数据赋值给 blob
    • document.createElement('a') 创建一个 <a> 标签,用来触发文件下载。
    • window.URL.createObjectURL(blob)blob 转换为一个 URL 资源。
    • downloadLink.download = fileName; 设置下载文件的名称。
    • downloadLink.click(); 模拟点击 <a> 标签,触发浏览器的下载动作。
    • window.URL.revokeObjectURL(downloadLink.href); 在下载完成后,撤销该 URL,释放内存。

2.3 处理错误部分

.catch((error) => {console.error('请求失败:', error);
});

3.总结

这段代码的主要功能是通过 POST 请求导出一个文件,处理服务器返回的文件数据或 JSON 数据。如果返回文件,则自动生成并下载;如果返回 JSON 数据,则提示用户没有数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android的logcat日志详解

Android log系统 logcat介绍 logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志&#xff0c;或把日志保存到我们指定的位置。 可以输入 adb logcat --help&#xff0c;查看一下一些简…

VMware vSphere5.0关闭虚拟机电源时,报错从ESXI主机接收到错误

ESXI和VCENTER都是5.0版本的&#xff0c;有台虚拟机关机报错提示从ESXI主机接受到意外错误 具体报错信息如下&#xff1a; 从VCENTER平台对该虚拟机做任何操作都无法生效&#xff0c;后来查看了虚拟机的网络和端口&#xff0c;发现SSH能正常联通&#xff0c;进入虚拟机后使用命…

刷题DAY30

求数列的和 题目&#xff1a;数列的定义如下&#xff1a;数列的第一项为n&#xff0c;以后各项为前一项的平方根&#xff0c;求数列的前m项的和 输入&#xff1a;输入数据有多组&#xff0c;每组占一行&#xff0c;由两个整数n&#xff08;n<10000&#xff09;和m(m<10…

使用i2c子系统驱动i2c oled模块

1、使用linux内核里面的i2c子系统来驱动i2c oled 屏幕 代码如下: #include "linux/i2c.h" #include <linux/module.h> #include <linux/poll.h>#include <linux/fs.h> #include <linux/errno.h> #include <linux/miscdevice.h> #incl…

Python执行cmd命令

在Python中执行cmd命令&#xff0c;可以使用内置的subprocess模块。以下是一个简单的例子&#xff0c;展示如何执行一个cmd命令并获取输出。 import subprocess# 要执行的cmd命令 cmd "dir"# 使用subprocess.run来执行命令 result subprocess.run(cmd, shellTrue,…

【云原生】docker 部署 Doris 数据库使用详解

目录 一、前言 二、数据分析概述 2.1 什么是数据分析 2.2 数据分析目的和意义 2.3 数据分析常用的技术和工具 2.3.1 编程语言 2.3.2 数据处理和分析库 2.3.3 数据可视化工具 2.3.4 数据库系统 2.3.5大数据处理框架 2.3.6 云服务和平台 2.3.7 其他工具 三、Doris介绍…

gdb中使用python脚本

1、入门案例 首先有1个a.cpp&#xff0c;代码如下&#xff1a; #include <map> #include <set> #include <iostream> #include <string>using namespace std;struct MyStruct {std::string mName;std::map<int, std::string> mField1;std::set…

linux下NTP服务器实战(ntp软件)

linux下NTP服务器实战(ntp软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用ntp软件包安装部署。 1. NTP服务器搭建实战 借助ntp软件包在linux上搭建ntp服务器,同时作为客户端从上游ntp服务器同步时间。 1.1 安装配置NTP服务器 1.1.1 安装NTP服务 在大多数L…

51单片机的无线病床呼叫系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器模块矩阵按键时钟模块等模块构成。适用于病床呼叫系统、16床位呼叫等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、温湿度信息、呼叫床位等信息&#xff1b; 2、DHT11采集病房温湿度信息&…

验证linux gpu是否可用

通过torch验证 import torchprint(torch.__version__) # 查看torch当前版本号 print(torch.version.cuda) # 编译当前版本的torch使用的cuda版本号 print(torch.cuda.is_available()) # 查看当前cuda是否可用于当前版本的Torch&#xff0c;如果输出True&#xff0c;则表示可…

深度学习的发展历程

深度学习的起源 在机器学习中&#xff0c;我们经常使用两种方式来表示特征&#xff1a;局部表示&#xff08;Local Representation&#xff09;和分布式表示&#xff08;Distributed Representation&#xff09;。以颜色表示为例&#xff0c;见下图&#xff1a; 要学习到一种好…

iPhone手机清理软件:照片清理功能全解析

在数字化生活中&#xff0c;智能手机成为我们记录生活点滴的主要工具&#xff0c;尤其是iPhone&#xff0c;以其卓越的相机功能备受用户青睐。然而&#xff0c;成千上万的照片迅速堆积&#xff0c;不仅占用了大量存储空间&#xff0c;还使得设备运行缓慢。在众多解决方案中&…

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能&#xff0c;来提高自己的 逻辑能力&#xff0c;熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class"box"><dl class"tab"><…

【系统架构设计师】工厂方法设计模式

工厂方法(Factory Method)模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化延迟到子类中进行。 工厂方法模式的主要角色 产品(Product):定义工厂的创建对象的接口。具体产品(Concrete Product):实…

【数据分享】《中国城市统计年鉴》(1985-2023)全PDF版本 第一次补档

数据介绍 中国城市&#xff0c;如同一本生动的历史书&#xff0c;承载着经济、社会的快速变迁。《中国城市统计年鉴》记录了城市的发展轨迹&#xff0c;是我们理解城市化进程、洞察城市挑战的重要指南。 这份年鉴的数据庞大而详实&#xff0c;囊括了中国城市发展的多个方面。…

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型

船舶机械设备5G智能工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。在当今数字化浪潮推动下&#xff0c;船舶制造业正经历着前所未有的变革。为了应对市场的快速变化&#xff0c;提升生产效率&#xff0c;降低成本&#xff0c;并增强国际竞争力&#xff0c;船舶机械设…

海底生物检测-目标检测数据集(包括VOC格式、YOLO格式)

海底生物检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Kp4Reqt4tq1IafVF33IrnA?pwddxbv 提取码&#xff1a;dxbv 数据集信息介绍&#xff1a; 共有 7383 张图像和一一对应的标注文件 标…

仕考网:事业编考试考什么?

事业编考试科目为&#xff1a; 《职测》《综应》《公基》三选二 事业编有哪些招考形式? ①联考 多省份统一考试&#xff0c;考试时间、考试内容相同&#xff0c;每年两次&#xff0c;上半年5月和下半年10月各一次; ②单招 用人单位单独招聘&#xff0c;考试时间和内容自…

js原型与原型链详解(万文总结,一文搞懂原型链!)

目录 一&#xff0c;原型 1&#xff0c; 对象 2&#xff0c;原型&#xff08;原型对象&#xff09; 二&#xff0c;隐式原型__proto__ 1&#xff0c;__proto__ 2&#xff0c;考你一下 三&#xff0c;原型链 1&#xff0c;Object.prototype 2&#xff0c;链 四&#xff0c;练…

如何设计项目架构

设计项目架构是软件开发过程中的关键步骤之一&#xff0c;它涉及到如何组织系统的各个部分以及它们之间的交互方式。良好的架构设计能够提高系统的可维护性、扩展性和性能。以下是设计C项目架构的一些基本原则和步骤&#xff1a; 1. 明确需求 在设计任何系统之前&#xff0c;…