SpringMVC的上传下载功能

SpringMVC的上传下载功能

1 上传excel格式文件:

前台页面

 <form method="post" action="/import/upload" enctype="multipart/form-data">
        <input class="easyui-filebox" name="empFile" data-options="prompt:'请选择文件',buttonText:'选择文件',buttonIcon:'icon-reload'" style="width:300px">
        <button class="easyui-linkbutton"  iconCls="icon-redo">导入</button>
        <a class="easyui-linkbutton" href="/import/empStencil">下载模版</a>
        <x-sign style="font-size: 50px">${ERROR_IN_SESSION}</x-sign>
    </form>

后台页面

 @RequestMapping("/upload")
    public  String upload(MultipartFile empFile, HttpServletResponse response, HttpServletRequest request) throws Exception{
        ImportParams params = new ImportParams();
        ServletContext servletContext = request.getServletContext();
        String xlsx="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        String xls="application/vnd.ms-excel";
        String contentType = empFile.getContentType();
        //如果不是表格类型的
        if(!xlsx.equals(contentType)&&!xls.equals(contentType)){
            //直接返回
            request.getSession().setAttribute("MESSAGE_IN_SESSION", "错误---请选择表格类型的文件");
            return "import";
        }
        //设置标题占的行数
        params.setTitleRows(1);
        //设置表头占的行数
        params.setHeadRows(1);
        //设置导入需要验证
        params.setNeedVerfiy(true);
        //设置自己的验证规则
        params.setVerifyHandler(employeeIExcelVerifyHandler);
        //发现部门无法显示----因为没有id--只将部门名称传递过来了
        //先通过部门名称找到部门----然后设置id进去
        /*List<Employee> list = ExcelImportUtil.importExcel(
                empFile.getInputStream(),
                Employee.class, params);*/
        ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(
                empFile.getInputStream(),
                Employee.class, params);
        //得到错误的列表
        List<Employee> failList = result.getFailList();
        //得到正确的列表
        List<Employee> list = result.getList();
        list.forEach(e->{
            //设置部门
            e.setDepartment(departmentService.findByName(e.getDepartment().getName()));
            //设置员工的初始密码
            e.setPassword(e.getUsername());
            //保存正确的用户
            employeeService.save(e);
        });

        //判断是否有失败的验证数据
        if(result.isVerfiyFail()){
            //得到失败数据的工作薄
            Workbook failWorkbook = result.getFailWorkbook();
            //设置返回的文件类型---需要response取返回---xslx
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            //设置导出的文件名
            response.setHeader("Content-disposition",  "attachment;filename=error.xlsx");
            //设置不缓存
            response.setHeader("Pragma", "No-cache");
            //得到一个输出流
            ServletOutputStream outputStream = response.getOutputStream();
            failWorkbook.write(outputStream);
            outputStream.close();
            failWorkbook.close();
        }
        request.getSession().setAttribute("MESSAGE_IN_SESSION", "选择文件正确");
        return "import";
    }
}

2 下载:

前台只需要想写一个a标签
后台代码:

/*下载模版*/
    @RequestMapping("/empStencil")
        public ResponseEntity<byte[]> download(HttpServletRequest request)throws Exception {
       //得到项目真实路径
        String realPath = request.getServletContext().getRealPath("");
        File file = new File(realPath,"employee.xlsx");
        HttpHeaders headers = new HttpHeaders();
        //下载显示的文件名,解决中文名称乱码问题
        String downloadFielName = new String("employee.xlsx".getBytes("UTF-8"),"iso-8859-1");
        // 通知浏览器以attachment(下载方式)打开图片
         headers.setContentDispositionFormData("attachment", downloadFielName);
         //application/octet-stream : 二进制流数据(最常见的文件下载)。
         headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
        return responseEntity;
    }

猜你喜欢

转载自blog.csdn.net/qq_36257490/article/details/85336570