表单中的文件上传必须要带上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文件上传下载
基础教程推荐
- Java通过动态规划设计股票买卖最佳时机 2023-06-17
- SpringSecurity详解整合JWT实现全过程 2023-03-21
- 一文带你搞懂Redis分布式锁 2023-05-19
- java如何用正则表达式匹配与提取字符串 2023-01-13
- js实现随机的四则运算题目效果 2023-08-02
- 为何HashSet中使用PRESENT而不是null作为value 2023-06-10
- 安装 Java 开发工具包JDK(Windows版本) 2023-09-01
- Java项目——模拟ATM(控制台连接Mysql数据库) 2023-11-06
- 创建Java线程安全类的七种方法 2022-12-27
- SpringBoot整合Docker实现一次构建到处运行的操作方法 2023-06-17