SpringMVC下实现Excel文件上传下载

表单中的文件上传必须要带上enctype=multipart/form-data属性。

SpringMVC下实现Excel文件上传下载的完整攻略

上传Excel文件

1. 在jsp页面中添加上传表单

表单中的文件上传必须要带上enctype="multipart/form-data"属性。

<form method="POST" action="/upload" enctype="multipart/form-data">
  <input type="file" name="excelFile" />
  <input type="submit" value="上传" />
</form>

2. 编写Controller

@Controller
public class UploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public String uploadExcel(@RequestParam("excelFile") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        //判断excel文件格式
        if(!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
            throw new IllegalArgumentException("错误的文件格式");
        }
        //处理excel文件
        //...
        return "result";
    }
}

@RequestParam注解用来获取上传的文件,MultipartFile类型的file参数表示上传的文件,通过getOriginalFilename()方法获取文件名。

3. 编写MultipartResolver的配置

在 springmvc.xml 中配置 MultipartResolver:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="5242880" />
</bean>

maxUploadSize属性表示上传文件的最大大小,单位为字节。这里上传文件大小限制为5MB。

下载Excel文件

1. 编写Controller

@Controller
public class DownloadController {

    @RequestMapping(value="/download", method=RequestMethod.GET)
    public void downloadExcel(HttpServletResponse response) throws IOException {
        String fileName = "example.xlsx";
        //设置response的Content-Disposition值,可以让浏览器弹出下载框
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        //设置response的ContentType值,描述返回内容类型
        response.setContentType("application/vnd.ms-excel");
        //将Excel文件输出到response
        OutputStream outputStream = response.getOutputStream();
        //...
    }
}

@RequestMapping注解指定请求URL为/download,请求方法为GET。通过HttpServletResponse对象设置response的Content-Disposition值和ContentType值,可以让浏览器弹出下载框和下载文件类型为Excel。

2. 编写输出Excel文件的代码

public class ExcelExporter {

    public static void export(List<User> userList, OutputStream out) throws IOException {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("用户列表");
        //创建表头
        XSSFRow headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("序号");
        headerRow.createCell(1).setCellValue("姓名");
        //创建表格内容
        int rowNum = 1;
        for(User user : userList) {
            XSSFRow row = sheet.createRow(rowNum++);
            //设置序号
            row.createCell(0).setCellValue(rowNum);
            //设置姓名
            row.createCell(1).setCellValue(user.getName());
        }
        workbook.write(out);
        out.flush();
    }
}

这里使用了Apache POI库,使用XSSFWorkbook对象创建Excel工作簿,使用XSSFSheet和XSSFRow对象创建Excel表格。最后通过输出流将Excel文件输出到response中。

3. 编写请求下载Excel文件的链接

<a href="/download">下载Excel文件</a>

示例

示例1:上传Excel文件

在jsp页面中添加上传表单,参考上面的步骤1。

编写Controller,参考上面的步骤2。

编写jsp页面显示上传结果,例如result.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传结果</title>
</head>
<body>
    <%if(success) {%>
        <p>上传成功</p>
    <%} else {%>
        <p>上传失败</p>
    <%}%>
</body>
</html>

注意:这里只是演示上传Excel文件的结果页面,success参数需要根据具体上传处理结果设置。

示例2:下载Excel文件

编写Controller,参考上面的步骤1。

编写输出Excel文件的代码,参考上面的步骤2。

编写jsp页面中含有请求下载Excel文件的链接,参考上面的步骤3。点击链接即可下载Excel文件。

本文标题为:SpringMVC下实现Excel文件上传下载

基础教程推荐