Postman导出正常但是Vue导出Excel文件损坏

这篇具有很好参考价值的文章主要介绍了Postman导出正常但是Vue导出Excel文件损坏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

将表单数据以 Excel 形式导出是一个很常见的行为,但是导出 Excel 也是一个很容易遇到问题的操作,本篇文章将记录一下本人在遇到 “Postman 导出正常但是 Vue 导出 Excel 文件损坏” 问题时是如何解决的,同时也提供给大家借鉴,如有错误或未考虑完全的地方,望不吝赐教。

一、问题背景

通过 Postman 调用 API 时返回的 buffer 正常,下载下来的 Excel 也能正常打开,数据正常,但是在 Vue 项目中导出的 Excel 却报错 “文件已损坏,无法打开”。

1、Postman buffer 返回正常

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

2、Postman 导出 Excel 正常

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

3、Vue 导出 Excel 文件损坏

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

二、问题分析与解决

Postman 能正常导出并且预览说明数据传输没问题,需要从前端看一下是不是前端有问题。后端返回的是 buffer 数据,也就是二进制数据,但是接口传输一般返回的都是字符串,所以首先需要排查的就是返回数据格式是否正确,如果是字符串的话,再转二进制肯定有问题。

1、排查请求返回数据格式

在前端的 axios 中找到 response.use,并 log 出我们的 response,查看 response 中的数据格式。

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

这里可以看到 response 中的 responseType 是空,同时返回的是数据格式为字符串,而不是
blob,这个时候我们就需要处理我们的请求,给我们的请求头上加上 responseType=“blob”
属性,再来看我们的请求返回的数据格式是否正确。

2、问题解决

给 axios 请求头上加入 responseType 属性

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

我对 axios 做了封装,所以看起来会不一样,没有封装的可以查看官网对应解决方案

官网示例:
Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

给请求头加上 responseType 后再来查看接口返回的数据格式

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

这里可以看到 response 中的 responseType 是 blob,同时 response 返回的也是 Blob 数据,此时我们再打开导出的 Excel

Postman导出正常但是Vue导出Excel文件损坏,postman,vue.js,excel,javascript

此时 Excel 能正常打开并且预览,大功告成!

3、总结

前端在导出 Excel 表时需要将请求中的 responseType 设置为 blob,之后才正常的接受并导出,否则接口会将 buffer 转为 String,这时转换导出的数据就是异常数据,所以打开文件才会报错文件损坏。文章来源地址https://www.toymoban.com/news/detail-597934.html

到了这里,关于Postman导出正常但是Vue导出Excel文件损坏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包