weixin_43972054 2021-12-22 17:26 采纳率: 100%
浏览 139
已结题

EasyExcel导出excel

问题遇到的现象和发生背景

使用EasyExcel导出单文件多sheet页的excel文件,使用postman测试时,文件会直接导出到项目目录下,此时文件时正确的,但是当我用浏览器直接访问接口时,下载的文件是错误的,我在下面放图片。请看到的各位给指点一下。谢谢!

问题相关代码,请勿粘贴截图
@Override
    @Transactional
    public void WriteEmpeInfo(HttpServletResponse response) throws IOException {
        String fileName = "EmpeInfo" + System.currentTimeMillis() + ".xlsx";
        int count = 0;
        ExcelWriter excelWriter = null;
        excelWriter = EasyExcel.write(fileName).build();//创建文件
        /*创建sheet页
         * writerSheet:第几个sheet页,sheet页名
         * head:继承了BaseRowModel的实体类 .class
         * */
        WriteSheet empeInfo = EasyExcel.writerSheet(0, "empeInfo").head(EmpeInfoExcel.class).build();
        List<EmpeInfoExcel> empe = easyExcelMapper.selectEmpe();//查询数据库数据
        excelWriter.write(empe, empeInfo);//把查到的数据写进sheet页

        WriteSheet edauInfo = EasyExcel.writerSheet(1, "edauInfo").head(EdauInfoExcel.class).build();
        List<EdauInfoExcel> edau = easyExcelMapper.selectEdau();
        excelWriter.write(edau, edauInfo);

        WriteSheet workInfo = EasyExcel.writerSheet(2, "workInfo").head(WorkInfoExcel.class).build();
        List<WorkInfoExcel> work = easyExcelMapper.selectWork();
        excelWriter.write(work, workInfo);

//        response.setContentType("application/vnd.ms-excel");
//        response.setCharacterEncoding("utf8");
//        response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName,"UTF-8"));
        File file = new File(fileName);
        try {
            if (!file.exists()) {
                response.sendError(404, "File not found!");
                return;
            }
            InputStream fis = new BufferedInputStream(new FileInputStream(fileName));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(file.getName().getBytes("UTF-8"), "iso8859-1"));
            response.addHeader("Content-Length", "" + file.length());
            //编码
            response.setCharacterEncoding("UTF-8");
            OutputStream out = new BufferedOutputStream(response.getOutputStream());
            out.write(buffer);

            out.flush();
            out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        // 千万别忘记finish 会帮忙关闭流
        excelWriter.finish();
    }

运行结果及报错内容

浏览器直接访问的方式,下载的文件有问题,请看到的给位多多指教

img

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • CSDN专家-Time 2021-12-23 15:29
    关注

    你的文件是二进制文件

    img


    这样下载

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同