下载excel表格后缀名为.do形式

最近用POI导出数据到excel,文件可以在浏览器下载,只是下载excel表格后缀名为.do形式。这里的do是我web.xml配置的filter过滤去的拦截方式,事实证明,这里配置什么拦截方式,后缀名就是什么。最后才发现是,我的响应头信息写错了。因为下载文件名为中文,各个浏览器的编码方式可能不同,文件名可能会乱码,所以网上搜了个工具类,于是写代码的时候没有正确导入,所以出现后缀名不正确的现象,以下附上完整代码。

工具类

public class fileUtilss {
    /**
     * 下载文件时,针对不同浏览器,进行附件名的编码
     *
     * @param filename
     *            下载文件名
     * @param agent
     *            客户端浏览器
     * @return 编码后的下载附件名
     * @throws IOException
     */
    public static String encodeDownloadFilename(String filename, String agent)
            throws IOException {
        if (agent.contains("Firefox")) { // 火狐浏览器
            filename = "=?UTF-8?B?"
                    + new BASE64Encoder().encode(filename.getBytes("utf-8"))
                    + "?=";
            filename = filename.replaceAll("\r\n", "");
        } else { // IE及其他浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+"," ");
        }
        return filename;
    }

coltroller

 // 将数据导入到excle表格
    @RequestMapping("/customer/excel")
    @ResponseBody
    public void toExcel(HttpServletRequest request, HttpServletResponse response)throws Exception{
        System.out.print("=================================");
        List customerList = customerService.getCustomerList();
        // 查询出 满足当前条件 结果数据
        //List customerList = customerService.exportCustomer();

        // 生成Excel文件
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        HSSFSheet sheet = hssfWorkbook.createSheet("客户信息");
        sheet.setDefaultColumnWidth(10);
        sheet.setDefaultRowHeightInPoints(20);

        // 表头
        HSSFRow headRow = sheet.createRow(0);
        headRow.createCell(0).setCellValue("客户id");
        headRow.createCell(1).setCellValue("客户姓名");
        headRow.createCell(2).setCellValue("客户来源");
        headRow.createCell(3).setCellValue("客户所属行业");
        headRow.createCell(4).setCellValue("客户级别");
        headRow.createCell(5).setCellValue("固定电话");
        headRow.createCell(6).setCellValue("手机号");

        // 表格数据
        for (Customer customer : customerList) {
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
            dataRow.createCell(0).setCellValue(customer.getCust_id());// 客户id
            dataRow.createCell(1).setCellValue(customer.getCust_name());// 客户姓名
            dataRow.createCell(2).setCellValue(customer.getCust_source());// 客户来源
            dataRow.createCell(3).setCellValue(customer.getCust_industry());// 客户所属行业
            dataRow.createCell(4).setCellValue(customer.getCust_linkman());    // 客户级别
            dataRow.createCell(5).setCellValue(customer.getCust_phone());  // 固定电话
            dataRow.createCell(6).setCellValue(customer.getCust_mobile()); // 手机号
        }

        // 下载导出
        // 设置头信息
        response.setContentType("application/vnd.ms-excel");
        String filename = "客户信息.xls";
        String agent = request.getHeader("user-agent");
        filename = fileUtilss.encodeDownloadFilename(filename, agent);
        response.setHeader("Content-Disposition",
                "attachment;filename=" + filename);
        ServletOutputStream outputStream = response.getOutputStream();
        hssfWorkbook.write(outputStream);
    }

所需jar包
下载excel表格后缀名为.do形式_第1张图片这里写图片描述

你可能感兴趣的:(下载excel表格后缀名为.do形式)