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

您所在的位置:网站首页 压缩包文件打开错误什么原因引起的 前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

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

2024-07-17 15:59:03| 来源: 网络整理| 查看: 265

目录 场景还原相关代码开发者工具 - 网络请求记录 问题排查定位改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 = fileUrl a.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文件已经可以正常打开了 在这里插入图片描述

总结

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

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

去看文档


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭