当前位置: 首页 > news >正文

前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

目录
  • 场景还原
    • 相关代码
    • 开发者工具 - 网络请求记录
  • 问题排查
    • 定位
    • 改bug
  • 总结

场景还原

我在前端使用axios接收后端xlsx表格文件流并下载,xlsx文件能够下载成功,但是打开却显示文件无法打开
xlsx文件无法打开

相关代码

请求API封装:Content–Type以及responseType经核对均没有问题

export function downloadStudent(courseId, data) {return request({url: `/curriculum/course/download/${courseId}`,method: 'POST',data,headers: {'Content-Type': "application/json"}, responseType: 'blob'})
}

接口调用:
在这里插入图片描述

下载函数封装:

/*** 下载处理器* @param name 文件名称* @param data 数据*/
export const handleDownload = (name, data) => {const fileUrl = window.URL.createObjectURL(new Blob([data]))const a = document.createElement('a')a.style.display = 'none'a.href = fileUrla.setAttribute('download', name)document.body.appendChild(a)a.click()window.URL.revokeObjectURL(a.href)document.body.removeChild(a)
}

开发者工具 - 网络请求记录

预览:二进制数据
在这里插入图片描述

问题排查

定位

可以看到文件数据已经接收到并且是二进制的,但是转为的xlsx文件却无法打开,所以我打印了一下数据想看下数据是否有问题
在这里插入图片描述
然后两眼一黑, undefined
在这里插入图片描述
这意味着我解构拿出来的data是未定义的,也就是说,在axios封装时候,响应拦截器里我经过一一系列处理,最后在code==200时会抛出resolve(response.data),我与后端约定的这个响应数据的格式是这样:

{"code": 200,"data": xxxx,"success": "success","success": true
}

那么解构出来显示data undefined,就意味着这个接收文件流的接口返回的响应数据格式很可能不是上面的格式。需要看一看response.data

改bug

既然解构拿出来没有那就不解构了,去响应拦截器里打印原始response看看
在这里插入图片描述
type是Blob没有问题,但是从response可以看到,data格式变了,response.data已经是解析后的Blob对象, 里面自然没有我们想要解构拿到的data,所以在最开始的接口API调用里不可以解构拿data,直接拿响应拦截器里resolve出的response.data用就行

在这里插入图片描述
在这里插入图片描述
现在下载的xlsx文件已经可以正常打开了
在这里插入图片描述

总结

是一次粗心大意,习惯性地直接解构拿出需要的数据,但忽略了接口文档里这个接口的响应示例说明(虽然说这个接口的响应示例说明里也啥都没写,但相比其他的接口,确实啥都没写也算是一种特别说明)

所以,更高效的解决方式就是 -->

去看文档

相关文章:

前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

目录 场景还原 相关代码开发者工具 - 网络请求记录 问题排查 定位改bug 总结 场景还原 我在前端使用axios接收后端xlsx表格文件流并下载,xlsx文件能够下载成功,但是打开却显示文件无法打开 相关代码 请求API封装:Content–Type以及responseType经核…...

PageRank Web页面分级算法 HNUST【数据分析技术】(2025)

1.理论知识 算法原理PageRank 通过网络浩瀚的超链接关系来确定一个页面的等级。 Google 把从 A 页面到 B 页面的链接解释为A页面给B页面投票, Google 根据投票来源(甚至来源的来源, 即链接到A页面的页面)和投票目标的等级来决定新…...

数字IC前端学习笔记:脉动阵列的设计方法学(四)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 引言 脉动结构(也称为脉动阵列)表示一种有节奏地计算并通过系统传输数据的处理单元(PEs)网络。这些处理单元有规律地泵入泵出数据以保持规则…...

对话 Project Astra 研究主管:打造通用 AI 助理,主动视频交互和全双工对话是未来重点

Project Astra 愿景之一:「系统不仅能在你说话时做出回应,还能在持续的过程中帮助你。」 近期,Google DeepMind 的 YouTube 频道采访了 Google DeepMind 研究主管格雷格韦恩 (Greg Wayne)。 格雷格韦恩的研究工作为 DeepMind 的诸多突破性成…...

NetApp 存储设备巡检作业指导书

NetApp 存储设备巡检作业指导书 一、目的 本指导书旨在指导管理员通过 SSH 或 Console 登录 NetApp FAS2552 存储系统,切换节点并进行日常管理操作。 二、适用范围 适用于基于 NetApp ONTAP 操作系统的 FAS2552 存储环境。 三、前提条件 网络和权限要求&#xff1…...

adb无法连接到安卓设备【解决方案】报错:adb server version (40) doesn‘t match this client (41);

下载老版本Platformtools​​​​​​​​​​​​​​https://dl.google.com/android/repository/platform-tools_r28.0.2-windows.zip?hlzh-cn 替换原来的platform-tools文件夹即可。 问题原因分析:电脑端adb client版本(41)和安卓端adb …...

每天五分钟机器学习:核函数

本文重点 在学习支持向量机算法之前,我们要继续学习一些数学基础,本文我们将学习核函数的概念。当数据线性不可分的时候,此时就需要核函数出场了,它可以将低维不可分的数据映射到高维可分数据,此时就可以完成数据分类了。 核函数的定义 核函数K(x, y)定义为两个数据点x…...

Word窗体联动Excel实现级联组合框

在Word中的使用用户窗体(UserForm)定制界面如下图所示,其中控件如下(忽略Label控件): CompanyName 组合框Attention 组合框CommandButton1 按钮 现在需要实现级联组合框效果,即用户在 CompanyN…...

RAG实战:构建基于本地大模型的智能问答系统

RAG实战:构建基于本地大模型的智能问答系统 引言 在当今AI快速发展的时代,如何构建一个既智能又可靠的问答系统是一个重要课题。本文将介绍如何使用RAG(检索增强生成)技术,结合本地大模型,构建一个高效的智…...

Docker 部署 plumelog 最新版本 实现日志采集

1.配置plumelog.yml version: 3 services:plumelog:#此镜像是基于plumelog-3.5.3版本image: registry.cn-hangzhou.aliyuncs.com/k8s-xiyan/plumelog:3.5.3container_name: plumelogports:- "8891:8891"environment:plumelog.model: redisplumelog.queue.redis.redi…...

TCP/IP 邮件

TCP/IP邮件是互联网通信中非常重要的应用之一。当我们发送电子邮件时,我们实际上并没有直接使用TCP/IP协议,而是通过电子邮件程序,例如微软的Outlook、莲花软件的Notes或Netscape Communicator等来实现。这些电子邮件程序背后使用了不同的TCP…...

FreeSql

官网 实体特性 Ado 它包括所有对 SQL 操作的封装,提供 ExecuteReader、ExecuteDataSet、ExecuteDataTable、ExecuteNonQuery、ExecuteScalar 等方法,使用起来和传统 SqlHelper 一样。 1、安装包 Install-Package FreeSql Install-Package FreeSql.Prov…...

记一次前端Vue项目国际化解决方案

背景 有一个vue项目,要实现国际化功能,能够切换中英文显示,因为该项目系统的用户包括了国内和国外用户。 需求 1、页面表单上的所有中文标签要国际化,包括表单属性标签、表格列头标签等, title“数量”;…...

JS进阶-手写Promise

一、什么是Promise 在Promise A规范中规定,Promise是一个有一个符合规范的then方法的对象或者函数。 1.关于then then接收onFulfilled和onRejected两个可选参数;then必须返回一个新的Promise对象;如果onFulfilled是一个函数 在状态切换为f…...

PCL点云库入门——PCL库点云滤波算法之直通滤波(PassThrough)和条件滤波(ConditionalRemoval)

0、滤波算法概述 PCL点云库中的滤波算法是处理点云数据不可或缺的一部分,它们能够有效地去除噪声、提取特征或进行数据降维。例如,使用体素网格滤波(VoxelGrid)可以减少点云数据量,同时保留重要的形状特征。此外&#…...

ioctl回顾

一、ioctl协议的命令组成 cmd本质为一个32位的数字,共分为四段: [31-30]:读写方向dir,分为无数据(_IO)、读数据(_IOR)、写数据(_IOW)、读写数据(_IOWR)四种模式; [29-16]:传递数据的大小size,一般利用其宏_IO、_IOR…...

jquery-validate在前端数据校验中的应用以及remote异步调用实践-以若依为例

目录 前言 一、关于Jquery Validate组件 1、validate是什么 2、内置验证方式及触发方式 3、自定义验证规则 二、基本验证实战以及Remote验证 1、基本验证实现 2、remote校验方式 三、总结 前言 随着技术的不断演进,在我们的日常开发过程中,大家一…...

如何重新设置VSCode的密钥环密码?

故障现象: 忘记了Vscode的这个密码: Enter password to unlock An application wants access to the keyring “Default ke... Password: The unlock password was incorrect Cancel Unlock 解决办法: 1.任意terminal下,输入如下…...

Android--java实现手机亮度控制

文章目录 1、开发需求2、运行环境3、主要文件4、布局文件信息5、手机界面控制代码6、debug 1、开发需求 需求:开发一个Android apk实现手机亮度控制 2、运行环境 Android studio最新版本 3、主要文件 app\src\main\AndroidManifest.xml app\src\main\res\layou…...

原点安全再次入选信通院 2024 大数据“星河”案例

近日,中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织开展的 2024 大数据“星河(Galaxy)”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…...

Elasticsearch RTF安全配置终极指南:X-Pack安装与免费License申请教程

Elasticsearch RTF安全配置终极指南:X-Pack安装与免费License申请教程 【免费下载链接】elasticsearch-rtf elasticsearch中文发行版,针对中文集成了相关插件,方便新手学习测试. 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearc…...

Realistic Vision V5.1虚拟摄影棚教程:自定义ControlNet姿势控制技巧

Realistic Vision V5.1虚拟摄影棚教程:自定义ControlNet姿势控制技巧 1. 项目概述 Realistic Vision V5.1虚拟摄影棚是基于当前最先进的写实风格生成模型开发的本地化工具,能够帮助用户轻松创建专业级摄影作品。这个工具特别适合需要高质量人像生成但又…...

大模型转型实战指南:从入门到求职,避坑全攻略

这两年,大模型技术彻底打破行业壁垒,从科研领域的专属议题,变成后端、测试、运维乃至跨行者的职业新选项,更是不少人职业转型的核心方向。 日常对接学员和行业朋友时,类似的疑问反复出现: “我做测试/运维…...

500元预算搞定无人机高清图传?手把手教你用OpenIPC+SSC338Q+IMX415攒一套(附硬件清单与避坑指南)

500元预算打造无人机高清图传:OpenIPCSSC338QIMX415实战手册 当大多数无人机爱好者还在为动辄上千元的专业图传设备犹豫时,一群极客已经用开源方案将成本压缩到惊人的500元区间。这不仅是预算的胜利,更代表着硬件DIY文化的精髓——用智慧填补…...

提升开发效率的跨平台游戏开发框架:从概念到发布的全流程指南

提升开发效率的跨平台游戏开发框架:从概念到发布的全流程指南 【免费下载链接】FXGL Java / JavaFX / Kotlin Game Library (Engine) 项目地址: https://gitcode.com/gh_mirrors/fx/FXGL 价值定位:为何选择FXGL游戏开发框架 在游戏开发领域&…...

什么是网站结构优化_它在 SEO 中的作用是什么_网站速度优化有哪些方法_它在 SEO 中的作用是什么

什么是网站结构优化?它在 SEO 中的作用是什么 网站结构优化,简称“结构优化”,是指通过优化网站的层级结构、导航系统和内容组织方式,以提升用户体验和搜索引擎的抓取效率的一系列措施。网站结构的良好设计,不仅可以让用户更容易…...

MySQL SSL连接异常:protocol_version不兼容问题排查与修复

1. 问题现象与背景分析 最近在Java项目中连接MySQL数据库时,不少开发者遇到了这样的错误提示:"javax.net.ssl.SSLException: Received fatal alert: protocol_version"。这个错误通常发生在使用Java 8环境配合较新版本的MySQL Connector/J驱动…...

实战起步:基于快马ai生成集成openclaw的windows自动化监控项目脚手架

实战起步:基于快马AI生成集成OpenClaw的Windows自动化监控项目脚手架 最近在做一个网络资源监控的小项目,需要在Windows环境下使用OpenClaw工具。作为一个经常被环境配置折磨的开发者,这次尝试用InsCode(快马)平台来生成完整的项目脚手架&am…...

Win11 提示“智能应用控制已阻止可能不安全的应用”怎么办?一文讲清原因、处理方法与避坑要点

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

老游戏兼容性终极解决方案:让经典游戏在现代Windows系统重生

老游戏兼容性终极解决方案:让经典游戏在现代Windows系统重生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/…...