SpringMVC下实现Excel文件上传下载
在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据、下载统计数据等等场景。针对这个问题,我写了个基于SpringMVC的简单上传下载示例,其中Excel的处理使用Apache的POI组件。
主要依赖的包如下:
commons-io commons-io 2.4 commons-fileupload commons-fileupload 1.3.1 org.springframework spring-web 4.0.0.RELEASE org.springframework spring-webmvc 4.0.0.RELEASE org.apache.poi poi 3.10.1
相关处理类:
(一)Controller类
packagecom.research.spring.controller;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.apache.poi.ss.usermodel.Workbook;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.multipart.MultipartFile;
importorg.springframework.web.servlet.ModelAndView;
importcom.research.spring.model.UserInfo;
importcom.research.spring.view.ExcelView;
@Controller
@RequestMapping("/file")
publicclassFileController{
/**
*Excel文件上传处理
*@paramfile
*@return
*/
@RequestMapping("/upload")
publicModelAndViewuploadExcel(@RequestParam("file")MultipartFilefile){
Listlist=newArrayList();
//这里只处理文件名包括“用户”的文件,模板使用下载模板
if(file.getOriginalFilename().contains("用户")){
try{
Workbookwb=newHSSFWorkbook(file.getInputStream());
Sheetsheet=wb.getSheetAt(0);
for(inti=1;i<=sheet.getLastRowNum();i++){
Rowrow=sheet.getRow(i);
UserInfoinfo=newUserInfo();
info.setUserName(row.getCell(0).getStringCellValue());
info.setPassword(row.getCell(1).getStringCellValue());
list.add(info);
}
}catch(IOExceptione){
e.printStackTrace();
}
}
ModelAndViewmav=newModelAndView("content");
mav.addObject("content",list.toString());
returnmav;
}
/**
*Excel文件下载处理
*/
@RequestMapping("/download")
publicModelAndViewdownloanExcel(){
Listlist=newArrayList();
UserInfouserInfo=newUserInfo();
userInfo.setPassword("0000");
userInfo.setUserName("sdfas");
list.add(userInfo);
list.add(userInfo);
list.add(userInfo);
list.add(userInfo);
Map>map=newHashMap>();
map.put("infoList",list);
ExcelViewve=newExcelView();
returnnewModelAndView(ve,map);
}
}
(二)实体类
packagecom.research.spring.model;
publicclassUserInfo{
privateStringuserName;
privateStringpassword;
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
@Override
publicStringtoString(){
return"UserInfo[userName="+userName+",password="+password
+"]";
}
}
(三)View类
这个类在下载时用到,在Spring渲染页面时使用自定义的View类进行Excel的相关处理。
packagecom.research.spring.view;
importjava.io.OutputStream;
importjava.net.URLEncoder;
importjava.util.List;
importjava.util.Map;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.springframework.web.servlet.view.document.AbstractExcelView;
importcom.research.spring.model.UserInfo;
/**
*下载Excel视图
*
*@authorwdmcygah
*
*/
publicclassExcelViewextendsAbstractExcelView{
@Override
protectedvoidbuildExcelDocument(Mapmodel,
HSSFWorkbookworkbook,HttpServletRequestrequest,
HttpServletResponseresponse)throwsException{
@SuppressWarnings("unchecked")
Listlist=(List)model.get("infoList");
if(list!=null&&list.size()!=0){
intlen=list.size();
Sheetsheet=workbook.createSheet();
//第一行文字说明
Rowrow=sheet.createRow(0);
Cellcell=row.createCell(0,Cell.CELL_TYPE_STRING);
cell.setCellValue("用户名");
cell=row.createCell(1,Cell.CELL_TYPE_STRING);
cell.setCellValue("密码");
//下面是具体内容
for(inti=0;i
(四)主要配置文件
上传文件时需要在配置文件中配置MultipartResolver类,配置后Spring会自动将文件传成MultipartFile对象,然后就可以进行相应的处理。示例看Controller类。
(五)测试页面
测试下载Excel功能
测试上传Excel功能
如果想看完整源码,可以到我的Github仓库查看。其中,上传文件只处理符合下载模板的文件。若要处理其它文件需要自实现。代码测试通过无误。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。