导出Excel后缀名问题(后端强制修改后缀名xlsx可以打开,前端无法打开)
1.理解需求
本次需求是普通的静态表头导出,一个直接查,另一个需要计算百分率。
所以也没想太多,直接第一个查数据,第二个计算一下组装数据就开始导出了。
2.问题出现
发现后缀名为exe,当时确实是愣了一下,于是我强制改成xlsx。
发现一切正常,于是我就没改,就这样和前端进行联调了。
果不其然,该出的问题跑不了,所以下次再遇到这种情况一定要在第一时间解决掉,避免浪费更多的时间。
前端导出文件后缀名为txt,当时确实愣了一下,改为xlsx后缀后发现出错。
重新测试了一下会出现undefined。当时是直接打不开。。。
在前端确认代码基本没问题的前提下,我觉得是后端代码的问题。于是在代码中查找有关于导出及后缀名的方法。
response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
原文档:https://blog.csdn.net/qq_42108192/article/details/81938674
很详细。(截取部分)
根据需求我们导出的是Excel文档。
所以,response.setContentType选择response.setContentType("application/vnd.ms-excel;charset=utf-8");
这次后端先用Postman测一下,看看是否还会发生exe后缀名的情况。
可以看到已经默认为xls了。
再测一下前端。发现没有出现异常情况。Bug修复。
总结:下次后端在开发的时候,发现异常情况要及时处理,即使好使,也要想一下为什么会出现这种问题。避免后续出现更多麻烦的事儿从而找不到原因。