[alibaba/easyexcel]我的response是一些乱码不知道啥错误。。。能帮忙看下嘛

2024-05-23 31 views
0

异常代码

//获取报表的开始时间和结束时间

        log.info("开始时间:"+startDay);
        log.info("结束时间:"+endDay);

        //查询数据
        List<ExcelDTO> list = tbGarbageBuyService.queryReport(startDay,endDay);

        ExcelWriter writer = null;
        OutputStream outputStream = response.getOutputStream();
        long startTime=System.currentTimeMillis();
        try {
            String fileName = URLEncoder.encode("测试", "UTF-8");
            //添加响应头信息
            response.setHeader("Content-disposition", "attachment; filename=" + fileName+".xlsx");
            response.setContentType("application/msexcel;charset=UTF-8");//设置类型
            response.setHeader("Pragma", "No-cache");//设置头
            response.setHeader("Cache-Control", "no-cache");//设置头
            response.setDateHeader("Expires", 0);//设置日期头

            //实例化 ExcelWriter
            writer = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX, true);

            //实例化表单
            Sheet sheet = new Sheet(1, 0, ExcelDTO1.class);
            sheet.setSheetName("统计表");
            //获取数据
            log.info("查询时间:{}s.条数:{}",(float)(System.currentTimeMillis()-startTime)/1000,list.size());

            startTime=System.currentTimeMillis();
            //输出
            writer.write(list, sheet);
            writer.finish();
            outputStream.flush();
        } catch (IOException e) {
            log.info("导出异常",e);
        } finally {
            try {
                response.getOutputStream().close();
            } catch (IOException e) {
                log.info("导出异常",e);
            }
        }
        log.info("导出:{}s",(float)(System.currentTimeMillis()-startTime)/1000);

回答

9

不是吧 这个我已经发送请求 返回的错误了,这个错误代码是浏览器F12查看response拿下来的

1

找到原因了 和编码没关系 我前端页面使用了ajax发送下载的请求就是如此问题,假如直接将地址黏贴到地址就能下载到文件response也不会乱码,这是什么操作????前端JS该咋弄呢。。。。

4

我是直接使用 window.location.href = url; 替换原来的ajax解决问题了 。

9

我是直接使用 window.location.href = url; 替换原来的ajax解决问题了 。

谢谢

4

我也遇到了,倒是把OutputStream换成File的方式,就可以了。好奇什么原因?