java 异步上传Excel 并解析Excel导入数据库

JAVA异步上传并解析Excel

    • ajax异步上传文件
    • springBoot方式接收文件
    • servlet模式接收文件
    • 解析Excel并导入数据库

ajax异步上传文件

//HTML代码,上传的表单

<form action="">
    选择文件:
    <input type="file" id="fileName" name="fileName"/>
    <button id="btnSubmit" class="closeBtn" type="button" onclick="uploadFile();"><i class="fa fa-times-circle"></i>关闭</button>
    <button id="btnSubmit" type="button" onclick="uploadFile();"><i class="fa fa-repeat"></i>上传</button>
</form>

//js代码 处理上传的文件

var uploadFile = function(){
 //文件类型校验
 var fileName = $("#fileName").val();
 var fileSuffix = fileName.split(".")[1];
 if(fileSuffix != "xlsx" && (fileSuffix != "xls")){
    swal("文件类型解析错误,只能导入excel格式文件(以.xlsx或.xls结尾的文件)");
    return;
 }
 
 //创建存储文件对象
 var formData = new FormData();
 formData.append("fileName",$("#fileName")[0].files[0]);
 
 //异步上传
 $.ajax({
  type:"post",
  url:"uploadFile",
  data:formData,
  dataType:"json",
  cache:false,
  contentType:false,
  processData:false,
  mimeType:"multipart/form-data",  //必须设置多媒体文件的方式上传
  success:function(data){
   swal(data.result);
  },
  error:function(){
   swal("请校验上传的文件是否正确!");
  },
  beforeSend:function(){ //上传文件时将按钮设置不可点击,防止重复提交
   $("#btnSubmit").attr("sisabled",true);
   $("#btnSubmit").val("正在上传...");
  },
  complete:function(){ //文件上传完成之后设置按钮操作
   $("#btnSubmit").attr("sisabled",false);
   $("#btnSubmit").val("上传");
  }
  
 });
 
};

springBoot方式接收文件

@RequestMapping("/uploadFile")
 @ResponseBody
 public Object uploadFile(@RequestParam("fileName")MultipartFile file) {
  Map<String,Object> map = new HashMap<String,Object>();
  try {
   //获取文件的输入流
   InputStream input = file.getInputStream();
   map.put("result",bugService.uploadFile(input));
  } catch (IOException e) {
   logger.error("文件解析异常!",e);
  }
  return map;
 };

servlet模式接收文件

需要导入 commons-fileupload.jar
然后从HttpServletRequest中获取文件

@RequestMapping("/uploadFile")
 @ResponseBody
 public Object uploadFile(HttpServletRequest request) {
  Map<String,Object> map = new HashMap<String,Object>();
  try {
   DiskFileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List<FileItem> list = upload.parseRequest(request);
   if(list.size()>0){
       FileItem item = list.get(0);
       map.put("result",bugService.uploadFile(item.getInputStream()));
   }
   request
   map.put("result",bugService.uploadFile(input));
  } catch (Exception e) {
   logger.error("文件解析异常!",e);
  }
  return map;
 };

解析Excel并导入数据库

//导入的包
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.mybatis.spring.SqlSessionTemplate;

/**
 * 解析excel并插入数据库
 */
@Override
 public String uploadFile(InputStream input) {
  //开启事务
  SqlSession session = template.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
  int number = 0;
  try {
   //解析Excel
   Workbook wb = WorkbookFactory.create(input);
   Sheet sheet = wb.getSheetAt(0);
   log.info("导入数据条数 === " + sheet.getLastRowNum());
   //跳过第一行为表头
   for(int i=1;i<=sheet.getLastRowNum();i++) {
    Row row = sheet.getRow(i);
    //数据为空,往下加载
    if(null == row) {
     continue;
    }
    
    String bugType = String.valueOf(getCellValue(row.getCell(0)));
    int count = bugMapper.queryBugTypeNumber(bugType);
    //如果该类型存在bugNumber+1
    if(count > 0) {
     number += bugMapper.updateNumber(bugType);
     continue;
    }
    
    //组装数据并插入
    SkBugTable sbt = new SkBugTable();
    sbt.setBugType(bugType);
    sbt.setBugName(String.valueOf(getCellValue(row.getCell(1))));
    sbt.setBugDesc(String.valueOf(getCellValue(row.getCell(2))));
    sbt.setCreateBy(String.valueOf(getCellValue(row.getCell(3))));
    sbt.setCreateDate(String.valueOf(getCellValue(row.getCell(4))));
    sbt.setBugNumber(1);
    number += bugMapper.insert(sbt);
   }
   //提交事务
   session.commit();
   session.clearCache();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  return "导入数据"+number+"条";
 }
 
/**
  * 获取cell中的值
  */
 private Object getCellValue(Cell cell){
  if(null == cell) {
   return null;
  }
  Object value = "";
  switch (cell.getCellType()) {
  case NUMERIC:
   BigDecimal decimal = new BigDecimal(cell.getNumericCellValue());
   value = decimal.doubleValue();
   break;
  case STRING:
   value = cell.getStringCellValue();
   break;
  case FORMULA:
   value = cell.getCellFormula();
   break;
  case BLANK:
   value = "";
   break;
  case BOOLEAN:
   value = cell.getBooleanCellValue();
   break;
  case ERROR:
   value = cell.getErrorCellValue();
   break;
  default:
   break;
  }
  return value;
 }

你可能感兴趣的:(JAVA,JS)