使用easyExcel从浏览器下载excel响应乱码

service层封装好数据后调用easyExcel生成表格并从浏览器下载

img


生成下载代码

img


前端返回200成功,但是响应乱码

img


文件也没有在浏览器下载下来。

找到问题所在了,乌龙了,前端调用没写好,对前端不是很熟悉.

img

img

public static void exportExcel(Class clazz, List list, String sheetName, HttpServletResponse response) throws IOException {
    try {
        response.setContentType("application/vnd.ms-excel;" + GlobalConstant.CHARSET_UTF8);
        response.setCharacterEncoding(GlobalConstant.UTF8);
        String fileName = URLEncoder.encode(sheetName, GlobalConstant.UTF8).replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), clazz)
                .autoCloseStream(Boolean.FALSE)
                .sheet(sheetName)
                .doWrite(list);
    } catch (Exception e) {
        // 重置response
        response.reset();
        response.setContentType(GlobalConstant.APPLICATION_JSON_VALUE);
        response.setCharacterEncoding(GlobalConstant.UTF8);
        Map<String, Object> map = new HashMap<>();
        map.put("status", 500);
        map.put("message", "下载文件失败" + e.getMessage());
        response.getWriter().println(JSON.toJSONString(map));
    }
}

如果你想IE下载文件,那你后端要将数据以流的形式推送给前端
也就是使用Response.BinaryWrite
你没有相关代码,那就只是在服务端内存里来回倒数据玩呢