最近工作遇到一个需求,需要下载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 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包有:
<!-- 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
相关文章:
广州营销型建站服务商推荐:技术优势与SEO优化解析
建站主机选购指南与交易推荐:核心配置解析
如何在万网自助建站中设置域名及备案?
制作农业网站的软件,比较好的农业网站推荐一下?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何通过老薛主机一键快速建站?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何在阿里云完成域名注册与建站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
南平网站制作公司,2025年南平市事业单位报名时间?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何访问已购建站主机并解决登录问题?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
建站主机如何选?性能与价格怎样平衡?
如何零基础在云服务器搭建WordPress站点?
网站制作价目表怎么做,珍爱网婚介费用多少?
临沂网站制作公司有哪些,临沂第四中学官网?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
自助网站制作软件,个人如何自助建网站?
如何安全更换建站之星模板并保留数据?
官网网站制作腾讯审核要多久,联想路由器newifi官网
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
建站之星后台密码遗忘如何找回?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何在万网开始建站?分步指南解析
做企业网站制作流程,企业网站制作基本流程有哪些?
建站之星各版本价格是多少?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
北京制作网站的公司,北京铁路集团官方网站?
建站主机功能解析:服务器选择与快速搭建指南
python的本地网站制作,如何创建本地站点?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
在线教育网站制作平台,山西立德教育官网?
南京网站制作费用,南京远驱官方网站?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
简单实现Android文件上传
如何制作算命网站,怎么注册算命网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
网站制作服务平台,有什么网站可以发布本地服务信息?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
高防服务器租用首荐平台,企业级优惠套餐快速部署
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
linux top下的 minerd 木马清除方法
无锡营销型网站制作公司,无锡网选车牌流程?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站三合一如何选?哪家性价比更高?
建站之星如何取消后台验证码生成?
*请认真填写需求信息,我们会在24小时内与您取得联系。