有同事使用了我写的ExcelUtil生成Excel并提供下载,使用Swagger进行测试的时候,发现下载的Excel打不开。解决思路如下:
- 首先更改输出流的地址,把Excel生成在本地测试下,发现功能正常,Excel可以打开;
- 检查response有没有正确设置Content-type和Content-disposition,发现也没有什么问题;
- 比较下载下来的Excel和第1步生成的Excel发现大小变大了,因此怀疑可能是在服务器到Swagger的过程中对流做了某些转换导致大小变大,无法打开。
解决方法
灵光一闪,会不会是Swagger本身有什么设置,于是上网查找资料,发现确实需要配置,导出方法的@ApiOperation注解的produces属性需要配置为"application/octet-stream",如下:
@ApiOperation(value = "导出设备列表到excel", notes = "deviceDeployVo", produces = "application/octet-stream")
response设置如下:
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=cardReaderList.xlsx");
设置完之后问题解决,文件大小一致,可以打开了,所以功能本身没问题。