前端(jsp页面):
<div class="fr">
<input type="hidden" value="${count}" id="count"/>
<!--导入-->
<button id="btnImport" type="button" class="btn-sm btn-export">上传</button>
<!--表单提交的文件-->
<form id="formUpload" method="post" enctype="multipart/form-data" action="${BASE_PATH}/files/upload">
<input type="file" id="true-import" style="display: none" name="file"/>
</form>
</div>
前端(js文件):实现弹出
/* 上传按钮点击事件 */
$("#btnImport").click(function(){
$("#true-import").val("");
$("#count").val("");
$("#true-import").trigger("click");
});
$("#true-import").change(function(){
$("#formUpload").submit();
});
前端(js文件):实现信息提示
/**
* 批量新增提示
*/
$(function() {
//页面一加载就判断
$(document).ready(function() {
//等待一秒执行
setTimeout(function(){
//数量不为空,且数量不为0,新增成功
if($("#count").val()!=""&&$("#count").val()!=0){
alert("success")
//判断完毕后清空,防止无效提示
$("#count").val("");
//数量为0,新增失败
}else if($("#count").val()=="0"){
alert("failed")
//判断完毕后清空,防止无效提示
$("#count").val("");
}
},1000)
});
});
后端(Controller.java):
@RequestMapping("/upload")
public String upload(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request, HttpServletResponse response,Model model) {
try {
int count=0;//新增的数据条数
// 把传递过来的file转换为输入流
InputStream in = file.getInputStream();
/*XSSFWorkbook readWb = new XSSFWorkbook(in);*///xlxs文件
HSSFWorkbook readWb = new HSSFWorkbook(in); //xls文件
// 外层循环,是文件行数的循环,循环的对象是文件的每一行
for (int i = 0; i < readWb.getNumberOfSheets(); i++) {
HSSFSheet sheet = readWb.getSheetAt(i);
//定义一个数组用来接收,String[4]实际长度根据字段自己定义,也可以用readWb.getNumberOfSheets()
String[] strArr = new String[4];
// 内层循环,是行的列的循环,循环的对象是行的每一个列
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = sheet.getRow(rowNum);
if (hssfRow != null) {
for (int colNum = 0; colNum < hssfRow.getPhysicalNumberOfCells(); colNum++) {
/*System.out.println(hssfRow.getCell(colNum));*/
strArr[colNum]=hssfRow.getCell(colNum).toString();
}
// 将数组的值挨个传递到map中,传递给新增的方法
Map map = new HashMap();
map.put("key1", strArr[0]);
map.put("key2", strArr[1]);
map.put("key3", strArr[2]);
map.put("key4", strArr[3]);
count++;
//调用新增的方法
XXXService.add(map);
}
}
}
//把新增的行数存到视图里,后续可以判断
model.addAttribute("count",count);
return "url/xxxx";
} catch (Exception e) {
e.printStackTrace();
//把新增的行数存到视图里,后续可以判断
model.addAttribute("count","0");
return "url/xxxx";
}
}
其他层的方法:
//根据map的实现的,dao层,service层代码,sql语句等
//根据所选框架的不同,请自行选择
//过于简单不在此赘述