前端导出excel文件,本地下载后无法打开或格式错误

项目场景:

在前端开发中,经常需要从后端获取数据并将其保存为本地文件,比如Excel文件。但在处理这类请求时,有时会遇到下载后的文件无法正常打开的问题。正巧再次遇到了类似的问题,并经过一系列排查找到了解决方案,简单记录一下

问题描述

当后端返回Excel格式的数据时,前端通过接口请求并尝试下载到本地。虽然请求成功并且下载完成,但在本地打开文件时却失败了。根据错误提示,我开始怀疑下载的数据格式可能存在问题。
在这里插入图片描述

原因分析:

检查后端返回的数据: 首先,我查看了后端返回的数据,发现数据格式看起来是正常的,Excel文件的内容在浏览器中也显示得没有问题。
配置responseType: 接着,我检查了前端请求的配置,确保已经设置了responseType: "blob"。这是因为当后端返回的是二进制数据时,我们需要告诉前端如何处理这种类型的数据。
下载后的文件内容: 下载完成后,我打开了文件,发现里面显示的是[object Object]。这让我感到困惑,因为后端返回的数据看起来是正常的。

1.后端返回的数据在浏览器查看如下(返回的数据正常):
在这里插入图片描述

2.在请求中需要如下配置`responseType: "blob"

	headers: {
      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
    },
    responseType: "blob"

3.成功下载,打开文件后内容为空
在这里插入图片描述

经过简单的分析,我猜测下载的数据之所以显示[object Object],可能是因为我在导出数据时直接将整个响应体对象(即response)导出了,而实际上正确的数据应该是response.data。在设置了responseType: "blob"之后,我们应该从response.data中获取二进制数据。

在这里插入图片描述

解决方案:

  • 确保设置responseType:在发起接口请求时,一定要确保设置了responseType: "blob",这样前端才能正确地处理后端返回的二进制数据
  • 正确获取数据:在导出数据时,应该使用response.data来获取二进制数据,而不是直接使用response
  • 检查响应拦截:如果你的项目中使用了响应拦截的公共处理方法,那么需要特别注意确保在下载文件时能够正确地获取到数据,避免因为拦截器处理不当而导致数据取错。
    在这里插入图片描述
  • 处理文件名:如果后端在响应头中配置了文件名(通过content-disposition),你可以通过处理response.headers["content-disposition"]来获取这个文件名,并在前端下载时给文件命名,这样下载的文件就更符合预期了

完整操作:

// 1.引入
	import { saveAs } from "file-saver";

// 2.接口定义
	request({
	    url: `........`,
	    method: 'post',
	    headers: {
	      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
	    },
	    responseType: "blob",
	    data: ''
	 })

// 3.请求并下载
	// 导出
    export2excel() {
      let params = { ...... };
      exportReportList(params).then(response => {
        // 检查Content-Disposition头以获取文件名:如果后端配置了文件名
        const contentDisposition = response.headers["content-disposition"];
        const filename = contentDisposition && contentDisposition.includes("filename=")
            ? contentDisposition.split("=")[1].trim().replace(/["']/g, "")
            : "fileneme.xlsx";
        // 使用FileSaver保存文件
        saveAs( new Blob([response.data], { type: "application/vnd.ms-excel;charset=utf-8" }), filename );
      });
    }

总结

在处理前端下载文件的问题时,我们需要注意数据的格式、响应类型的设置以及如何正确地获取数据。同时,还需要关注项目中可能存在的响应拦截器,确保它们不会影响到我们的下载逻辑。通过仔细地排查和分析,我们可以找到问题的根源并解决它。

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vf6.0,要考二级没系统的下哈 Microsoft Visual FoxPro 6.0 for Windows 的常见问题 这些是有关 Microsoft Visual FoxPro 最常见的问题。在您求助 Microsoft 产品支持服务之前,请先查阅这张列表。 若想打印这些附注,请从“文件”菜单中选择“打印”命令。此文档分为以下四部分: --------------------------------------------------------------------- 部分 1. 技术支持与市场 部分 2. Visual FoxPro 6.0 新增功能 部分 3. 从其他版本的 FoxPro 和 Visual FoxPro 中移植 部分 4. Visual FoxPro 常见问题 --------------------------------------------------------------------- 部分 1. 技术支持与市场 问题 1-1: 从何处可以获得产品的更新版本? 答案: 在 Visual FoxPro 的 Web 站点上即可获得产品的更新信息,其中包括有关 Service Pack 和更新的示例、向导及其他代码的信息,该站点的网址为: www.microsoft.com/vfoxpro 请定期查看该网站,以便下载产品的最新版本。 问题 1-2: 从何处可以得到有关 Visual FoxPro 的详细资料? 答案: 通过 Microsoft Visual FoxPro Web 站点是随时获得各种最新产品发布信息的最佳途径。在此站点上不仅有新的产品公告,而且还提供了产品的更新信息、技术文章、白皮书、专业开发人员设计的优秀示例、会议公告、以及与其他许多 FoxPro web 站点的各种链接。 问题 1-3: 如何获得技术支持,以及如何报告软件错误? 答案: Microsoft Visual FoxPro Web 站点已经链接到了多种联机支持选项,其中包括覆盖面广阔的有关所有产品 Microsoft Knowledge Base(Microsoft 知识库)。您还可以阅读一份有关常见问题的清单。除联机支持之外,还可以直接通过电话获得技术支持。“帮助”菜单中的选项可列出技术支持的电话号码。这些电话号码也可用于报告产品中的错误。 问题 1-4. 什么是 Knowledge Base?如何使用它? 答案: Knowledge Base 是内容广泛的论文集,覆盖了如何使用产品的各种特性、已知的软件错误及其解决方案或回避的方法、以及其他有助于使用各种 Microsoft 产品的有用信息。通过以下站点可访问整个 Knowledge Base: support.microsoft.com 问题 1-5: 是否会有 Visual FoxPro 6.0a? 答案: Microsoft 公司一向承诺为用户提供高质量的产品。如果确实需要,我们将提供 Visual FoxPro 6.0 的错误修订版。但是,修订版不会使用 6.0a 版的形式。Visual FoxPro 6.0 中任何错误的修正都将包含在 Visual Studio Service Pack 中。同时还会在 Visual FoxPro 的 www.microsoft.com/vfoxpro 或 Visual Studio 的www.microsoft.com/vstudio 的 Web 站点上发布修订公告。 问题 1-6: Microsoft 公司为应用程序的开发提供了一些优秀的解决方案。怎样才能知道应该向客户推荐和使用哪种产品? 答案: 在选择适用某项任务的产品时,需要考虑多方面的因素。Microsoft Visual FoxPro web 站点上有一份优秀的策略背景论文,它比较了 Visual FoxPro、Visual Basic、SQL Server 和 Access 等 Microsoft 产品之间的不同。 问题 1-7: 哪里可以找到 Visual FoxPro 的使用示例? 答案: Visual FoxPro 6.0 产品中带有丰富的示例,其中有一些是针对 6.0 版特有功能的新示例。与 Visual FoxPro 以前的版本不同,这些示例将与所有 Visual Studio 示例安装在一起。您必须运行 MSDN Library 的“自定义”安装来安装这些示例。在 Visual FoxPro 中可使用新的 HOME(2) 函数方便地找到已安装示例的位置。 除了产品中所自带的示例外,Microsoft Visual FoxPro web 站点还将经常提供新的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值