spring mvc export excel failed sometimes and data displays garblend on the page

Dave Pateral

There is a data report as the following in my project, I want to export it as excel: enter image description here But the wierd thing is that sometimes it exports successfully and sometimes failed. I have tried many times and it turns out that when the excel sheet is over 17 lines, it will lead to this:

  1. the page redirects to a new page with garblend data.
  2. the post request has been changed to get request.

enter image description here

It's sure that the excel is successfully created even if it exports failed, because I have written it to disk and checked the file. The following is the controller, what goes wrong with me?

   @RequestMapping("/download")
    public void download(HttpServletRequest request, HttpServletResponse response, ReportCondition condition){
        try {
            List<HashMap<String, String>> mapList = reportFormService.find(condition);
            if(mapList == null || mapList.size() == 0){
                logger.info("No reports...");
            }

            Map<String, Date> dateMap = DateConditionUtil.getStartEndDate1(condition.getStartDate(), condition.getEndDate());
            String startDate = DateFormatUtils.format(dateMap.get("startDate"), "yyyyMMdd");
            String endDate = DateFormatUtils.format(dateMap.get("endDate"), "yyyyMMdd");
            String[] titleArr = new String[]{"序号","日期","应用系统","短信服务商","请求发送总数","请求成功数量","实际短信条数","实际成功条数","费用","失败数量","成功率"};
            String[] fieldArr = new String[]{"ID","RECORDDATE","APPNAME","PROVIDERNAME","SENDCOUNT","SUCCESSCOUNT","SENDSUM","SUCCESSSUM","TOTALFEE","FAILURECOUNT","SUCCESSRATE"};

            ByteArrayOutputStream os = new ByteArrayOutputStream();
            WorkBookUtil.createExcel(titleArr, fieldArr, mapList, os);

            try(BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(os.toByteArray()));
                BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream())){
                byte[] buff = new byte[1024];
                int bytes;
                while (-1 != (bytes = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytes);
                }
                bos.flush();
            }catch (Exception e){
                logger.error(e);
            }

            response.setCharacterEncoding("utf-8");
            response.setHeader("content-disposition", "attachment;filename=" + String.format("%s-%s.xls", startDate, endDate));
            response.setContentType("application/vnd.ms-excel;charset=utf-8");

        } catch (IOException e){
            logger.error("Export failed", e);
        }
    }
benashby

Try adding your response headers before writing the bytes out to the user. It would help to add a content-length header as well. You can get that after your call to createExcel with os.toByteArray().length. In addition close() your bos after you flush() it.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  3. 3

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  4. 4

    pump.io port in URL

  5. 5

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    Do Idle Snowflake Connections Use Cloud Services Credits?

  9. 9

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

  10. 10

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  11. 11

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  12. 12

    Generate random UUIDv4 with Elm

  13. 13

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  14. 14

    Is it possible to Redo commits removed by GitHub Desktop's Undo on a Mac?

  15. 15

    flutter: dropdown item programmatically unselect problem

  16. 16

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  17. 17

    EXCEL: Find sum of values in one column with criteria from other column

  18. 18

    Pandas - check if dataframe has negative value in any column

  19. 19

    How to use merge windows unallocated space into Ubuntu using GParted?

  20. 20

    Make a B+ Tree concurrent thread safe

  21. 21

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

HotTag

Archive