基于Spring Mvc实现的Excel文件上传下载示例
发布时间 - 2026-01-10 23:17:02 点击率:次最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库。因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例。

基础框架
之前曾经介绍过一个最简单的spring mvc的项目如何搭建,传送门在这里。
这次就基于这个工程,继续实现上传下载的小例子。需要做下面的事情:
1 增加index.html,添加form提交文件
2 引入commons-fileupload、commons-io、jxl等工具包
3 创建upload download接口
4 注入multipartResolver bean
5 在upload中使用HttpServletRequest获取文件流,通过WorkBook进行解析
6 在download中通过HttpServerResponse返回文件流,实现下载
页面
页面很简单,其实就是一个form标签,需要注意的是:
- form中enctype="multipart/form-data"
- action指定访问的url
- input中需要设置name属性,这样后端才能获取到文件对象
<form role="form" action="/upload" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="file">上传文件</label>
<input type="file" id="file" name="file">
</div>
<button type="submit" class="btn btn-default">提交</button>
</form>
引入commons-fileupload、jxl等工具包
涉及的jar包有:
- commons-fileupload 用于获取上传文件
- jxl 用于解析excel
<!-- springframework begins -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b01</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jexcelapi/jxl -->
<dependency>
<groupId>jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6</version>
</dependency>
Xml的配置
在web.xml中需要配置默认的访问页面,因为之前已经设置过拦截的请求是/,因此如果不设置所有的静态页面都会被拦截下来。
<welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
在spring的配置文件中,加入CommonsMultipartResolver的bean。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- set the max upload size100MB -->
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
上传代码
@RequestMapping("upload")
public void upload(HttpServletRequest request, HttpServletResponse response) throws IOException, BiffException, WriteException {
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
MultipartFile file = mRequest.getFile("file");
Workbook workbook = Workbook.getWorkbook(file.getInputStream());
//遍历Sheet页
Arrays.stream(workbook.getSheets())
.forEach(sheet -> {
int size = sheet.getRows();
for(int i=0; i<size; i++){
//遍历每一行,读取每列信息
Arrays.stream(sheet.getRow(i)).forEach(cell -> System.out.println(cell.getContents().equals("")?'空':cell.getContents()));
}
});
response.setHeader("Content-Disposition", "attachment; filename=return.xls");
WritableWorkbook writableWorkbook = ExcelUtils.createTemplate(response.getOutputStream());
writableWorkbook.write();
writableWorkbook.close();
}
下载代码
@RequestMapping("download")
public void download(HttpServletRequest request, HttpServletResponse response) throws IOException, BiffException, WriteException {
response.setHeader("Content-Disposition", "attachment; filename=template.xls");
WritableWorkbook writableWorkbook = ExcelUtils.createTemplate(response.getOutputStream());
writableWorkbook.write();
writableWorkbook.close();
}
模板类
static class ExcelUtils {
public static WritableWorkbook createTemplate(OutputStream output) throws IOException, WriteException {
WritableWorkbook writableWorkbook= Workbook.createWorkbook(output);
WritableSheet wsheet = writableWorkbook.createSheet("测试title", 0);
CellFormat cf = writableWorkbook.getSheet(0).getCell(1, 0).getCellFormat();
WritableCellFormat wc = new WritableCellFormat();
// 设置居中
wc.setAlignment(Alignment.CENTRE);
// 设置边框线
// wc.setBorder(Border.ALL, BorderLineStyle.THIN);
wc.setBackground(jxl.format.Colour.GREEN);
Label nc0 = new Label(0, 0, "标题1",wc);//Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是z
Label nc1 = new Label(1, 0, "标题2",wc);
Label nc2 = new Label(2, 0, "标题3",wc);
Label nc3 = new Label(0, 1, "dddd");
Label nc4 = new Label(1, 1, "ffff");
wsheet.addCell(nc0);
wsheet.addCell(nc1);
wsheet.addCell(nc2);
wsheet.addCell(nc3);
wsheet.addCell(nc4);
return writableWorkbook;
}
}
最后贡献下相关的代码:SpringTest_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# springmvc
# 上传excel
# spring
# mvc
# 文件上传
# 下载excel
# SpringMVC下实现Excel文件上传下载
# spring mvc实现文件上传与下载功能
# SpringMVC实现文件上传和下载功能
# Spring MVC的文件上传和下载以及拦截器的使用实例
# Spring MVC异步上传、跨服务器上传和文件下载功能实现
# 遍历
# 工具包
# 单元格
# 上传文件
# 的是
# 上传
# 我就
# 在这里
# 很简单
# 最简单
# 先用
# 需要注意
# 为了更好
# 配置文件
# 大家多多
# 后端
# 实现了
# 传送门
# 样例
# dependency
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在七牛云存储上搭建网站并设置自定义域名?
如何彻底删除建站之星生成的Banner?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Laravel如何使用模型观察者?(Observer代码示例)
Laravel如何实现API速率限制?(Rate Limiting教程)
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
网站制作壁纸教程视频,电脑壁纸网站?
如何快速重置建站主机并恢复默认配置?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何优化应用性能?(缓存和优化命令)
如何在万网ECS上快速搭建专属网站?
无锡营销型网站制作公司,无锡网选车牌流程?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
如何用已有域名快速搭建网站?
如何挑选优质建站一级代理提升网站排名?
如何在阿里云服务器自主搭建网站?
高端建站如何打造兼具美学与转化的品牌官网?
使用C语言编写圣诞表白程序
C语言设计一个闪闪的圣诞树
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何快速搭建支持数据库操作的智能建站平台?
如何在自有机房高效搭建专业网站?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Swift开发中switch语句值绑定模式
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何将凡科建站内容保存为本地文件?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
用v-html解决Vue.js渲染中html标签不被解析的问题
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
晋江文学城电脑版官网 晋江文学城网页版直接进入
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Laravel如何实现用户密码重置功能?(完整流程代码)
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何在VPS电脑上快速搭建网站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
网站建设要注意的标准 促进网站用户好感度!
如何在腾讯云免费申请建站?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
如何注册花生壳免费域名并搭建个人网站?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel如何使用Vite进行前端资源打包?(配置示例)
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
如何快速生成专业多端适配建站电话?

