关于SpringMVC 的文件下载实例

关于SpringMVC 的文件下载实例

今天项目用到了在服务器下载文件的问题,这里简单总结一下(关于SpringMVC的基础配置这里省略不提,需要的小伙伴可以看前面的文章)

实例为把数据库数据导出为.xls结尾的文件,如果需要导出为.xlsx的文件,只需要把HSS……相关对象改变为XSS……即可;

下面贴代码(步骤请看注释):

/**
     * 静态创建*.xls文件方法
     * @param sheetName 下脚标题
     * @param titleName 标题
     * @param attList 集合数组对象
     * @return
     */
    public static HSSFWorkbook excelExport(String sheetName, String titleName[], List<String[]> attList){
        // 第一步,创建HSSFWorkbook,对应一个Excel文件  
        HSSFWorkbook wb = new HSSFWorkbook();  
        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  
        HSSFSheet sheet = wb.createSheet(sheetName);  
        // 第三步,在sheet中添加表头第0�?注意老版本poi对Excel的行数列数有限制short  
        HSSFRow row = sheet.createRow((int) 0);  
        // 第四步,创建单元格,并设置表头 设置表头居中  
        HSSFCellStyle style = wb.createCellStyle();  
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建表格居中格式  
        HSSFCell cell = null;
        for (int i = 0; i < titleName.length; i++) {
            cell = row.createCell((short) i);
            cell.setCellValue(titleName[i]);  
            cell.setCellStyle(style);
        }
        // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  
        for (int i = 0; i < attList.size(); i++)  
        {  
            row = sheet.createRow((int) i + 1);  
            //得到数组对象(逻辑层)
            String attribute[] = attList.get(i);
            for (int j = 0; j < attribute.length; j++) {
                if(attribute[j] == null || attribute[j].equals("")){
                    row.createCell((short) j).setCellValue("");
                }else{
                    row.createCell((short) j).setCellValue(attribute[j]);
                }
            }
        }  
        // 第六步,将文件存到指定位,掉用方法中进行
        return wb;
    }

偷下懒把逻辑层和控制层合并写在一起

@RequestMapping("/manage/TourisExcelExport")
    public String excelExport2(HttpServletRequest request, HttpServletResponse response, String userType){
        String titleName[] = { "序号", "类型", "等级", "第三方联系", "用户邮箱", "用户名字", "电话", "国家", "备注" };
         // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  
        List list = null;
        try {
            if(userType.equals("vip")){
                list = userServiceImpl.findAll();
            }else{
                list = userServiceImpl.findAllTourist();
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        List<String[]> attList = new ArrayList<String[]>();
        for (int i = 0; i < list.size(); i++)  
        {  
            User user = (User) list.get(i);
            String num = i+1+"";
            String attribute[] = {num, user.getUserType().getTinfo(),
                    user.getUserLevel().getLname(),
                    user.getUserOther().getOtherinfo(), user.getUemail(), user.getUname(),
                    user.getUphone(), user.getUcountry(), user.getNote()};
            attList.add(attribute);//添加数组对象
        }  
        //得到HSSFWorkbook对象
        HSSFWorkbook wb = ExcelUtil.excelExport("用户表(游客)", titleName, attList);
        // 第六步,将文件存到指定位
        try  
        {  
            //设置响应头
            response.setContentType("application/vnd.ms-excel");  
            response.setCharacterEncoding("utf-8");  
            //这里对文件名进行编码,保证下载时汉字显示正常  
            String fileName = URLEncoder.encode(System.nanoTime()+".xls", "utf-8");  
            //Content-disposition属性设置成以附件方式进行下载  
            response.setHeader("Content-disposition", "attachment;filename="  
                    + fileName);  
            OutputStream fout = response.getOutputStream();  
            //FileOutputStream fout = new FileOutputStream(file);
            wb.write(fout);//写入
            fout.close();   
        }  
        catch (Exception e)  
        {  
            e.printStackTrace();  
        }
        return null;
    }

视图层

<a href="/manage/TourisExcelExport.action"></a>/*根据自己配置添加或不添加后缀(.action)*/

结果(如下图):
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_33624284/article/details/78723019