[alibaba/easyexcel]linux线上环境下web下载数据是空 但是在本地开发是可以下载的

2024-05-24 227 views
2

异常代码 @Override public void exportExcel(HttpServletResponse response) { try { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=配对表.xlsx");

        this.service.exportExcel(response);

    } catch (IOException e) {
        e.printStackTrace();
    }

}

**异常提示**
请提供完整的异常提示,记住是全部异常!
**建议描述**

回答

4
  1. 确定线上是否存在数据,保证有值
  2. 保证没有发生异常
  3. 保证调用finish()
9

接口是调用到了,但是就是没有response流,因为在本地开发的时候是可以下载下来

8

提供下this.service.exportExcel(response);这个方法导出相关的代码,不像是没有到导出,像是在某个地方卡住,或者抛出异常但是没有被捕获,

response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=配对表.xlsx");

这部分代码放到finish()之前调用,否则中间发生异常因为流已经写入了头部所以没办法返回json

8
public void exportZoneMatchExcel(HttpServletResponse response) throws IOException{
        Project project = projectService.getCurrentYearProject();
        List<ZoneModel> data = this.mapper.getZoneMatchList(project.getId());
        ExcelWriterSheetBuilder sheet = EasyExcel.write(response.getOutputStream(), ZoneModel.class)
                .sheet("sheet");
        Map<String, Integer> map = Maps.newLinkedHashMap();
        for (ZoneModel z : data) {
            String key = z.getSchoolName();
            map.merge(key, 1, Integer::sum);
        }

        int rowIndex = 1;
        for (String key : map.keySet()) {
            int rowCounts = map.get(key);
            // 如果合并的行数是1 easyExcel 会抛异常
            if(rowCounts == 1) {
                rowIndex += rowCounts;
                continue;
            }
            int lastRawIndex = rowIndex - 1 + rowCounts;
            OnceAbsoluteMergeStrategy mergeSchool = new OnceAbsoluteMergeStrategy(
                    rowIndex, lastRawIndex,0,0);
            OnceAbsoluteMergeStrategy mergeZoneContact = new OnceAbsoluteMergeStrategy(
                    rowIndex, lastRawIndex,1,1);
            OnceAbsoluteMergeStrategy mergeZoneContactTel = new OnceAbsoluteMergeStrategy(
                    rowIndex, lastRawIndex,2,2);

            rowIndex += rowCounts;
            sheet.registerWriteHandler(mergeSchool);
            sheet.registerWriteHandler(mergeZoneContact);
            sheet.registerWriteHandler(mergeZoneContactTel);
        }

        sheet.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).doWrite(data);

    }

Service里的异常抛出 在controller里进行捕获

本地测是 有response的

线上的Network里就是没有任何的响应,能下载下来 但是里面数据是空的

9

能下载下来的话,

  • 里面没有任何数据包括表头,说明data == null
  • 里面没有任何数据但是有表头data.isEmpty()
8

能下载下来是前端的原因,接口是没有任何response的 而且日志里data是有的 image