我使用了一个服务器端的程序,写了一个excel文件给响应,但是程序返回了一个无法正常打开的excel文件,经过测试,我发现了以下几种情况:
1.当服务器端程序在本地windows环境下运行时,一切正常,但在Linux测试环境下运行时返回的文件无法打开。
1.甚至连curl在Linux测试环境下下载的excel文件都打不开。
1.不使用响应直接保存时文件正常,确认写入响应时存在问题。
1.发生异常时返回的文件大小大于正常值。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String fn = fileName + sdf.format(new Date()) + ".xlsx";
String utf = "UTF-8";
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding(utf);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=30");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fn, utf));
字符串
我尝试更改excel文件的编码或字体,希望得到正常的返回,但返回的文件仍然无法打开。
1条答案
按热度按时间fhity93d1#
我发现了这个bug。服务器上的一个额外的拦截器拦截了我的响应并将其转换为字符串,这导致了文件损坏