基于Spring MVC的文件上传

JSP

  <a href="javascript:void(0);"  onclick="inPage()" class="pt_btn btn_blue" id="inport" style="width:100px;">上传文件</a>

function inPage(){
  $("#file_form")[0].reset();
  $(".errInfo").html('');
  $("#mainImTitleSpan").html('文件上传');
  $("#mask_box_im_from").fadeIn();
}

<!--导入客户资源弹框 -->
<div id="mask_box_im_from" class="mask_box" style="overflow:auto;">
  <div class="shade_box">
  </div>
  <div class="mask_main" style="text-align: left;height: 200;">
    <a href="javascript:;" class="mask_colse"></a>
    <div class="mainTitle">
      <span id="mainImTitleSpan" style="margin-left: 36px;"></span>
    </div>
    <div class="rmsCon">
    <form id="file_form" action="${ctx}/inten/importSource" enctype="multipart/form-data" method="post">
      <ul class="content">
        <li>
        &nbsp;&nbsp;&nbsp;&nbsp;<input type="file" name="Mfile" id="file_input"/>
        </li>
        <div>
          <input type="submit" value="确定" id="import_cust_pt_btn" class="pt_btn btn_blue" style="margin-left: 90px; width: 80px;"/>
          <a href="javascript:void(0);" onclick="$('.mask_box').fadeOut();" class="btn_grayline ml_18">取消</a>
        </div>
      </ul>
   </form>
      </div>
  </div>
</div>

JS

$("#import_cust_pt_btn").click(function(){
  $("#file_form").submit(
  function() {
    //首先验证文件格式
  var fileName = $('#file_input').val();
  if (fileName === '') {
    alert('请选择文件');
    return false;
  }
  var fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();
  if (fileType !== 'xls' && fileType !== 'xlsx') {
    alert('文件格式不正确,excel文件!');
    return false;
  }

  $("#file_form").ajaxSubmit({
    dataType : "json",
    success : function(data, textStatus) {
    if (data.list == null){
      $('.mask_box').fadeOut();
      alert('上传文件成功');
    } else {
      $('.mask_box').fadeOut();
      alert(data.list);
    }
    return false;
    }
  });
  return false;
  });
});

Controller

@RequestMapping("/importSource")
@ResponseBody
public ResultVo importSource(MultipartFile Mfile,HttpServletRequest request, HttpServletResponse response) throws Exception{
  ResultVo rv=new ResultVo();
  List<String> msgList= new ArrayList();
  //判断文件是否为空
  if(Mfile==null) return rv;
  //获取文件名
  String name=Mfile.getOriginalFilename();
  //进一步判断文件是否为空(即判断其大小是否为0或其名称是否为null)
  long size=Mfile.getSize();
  if(name==null || ("").equals(name) && size==0) return rv;

  // 将客户端上传文件存储在服务器本地
  CommonsMultipartFile cf = (CommonsMultipartFile) Mfile; // 把spring文件上传的MultipartFile转换成CommonsMultipartFile类型
  String directory = "D:\\fileupload";
  File file = new File(directory);
  // 创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
  if (!file.exists())
  file.mkdirs();
  // 根据文件名判断文件是2003版本还是2007版本,然后在服务器本地创建相应的文件
  File file1 = null;
  if (isExcel2007(name)) {
    file1 = new File(directory, new Date().getTime() + ".xlsx");
  }else{
    file1 = new File(directory, new Date().getTime() + ".xls");
  }
  // 将上传的文件写入新建的文件中
  try {
    cf.getFileItem().write(file1);
  } catch (Exception e) {
    msgList.add("文件保存本地出现异常");
    rv.setList(msgList);
    return rv;
  }

  //开始处理文件
  try{
    //查出所有启用的未删除的且状态是有效的BD
    List<Staff> bds = UcHelper.getStaffsByLevelCode("L1001003");
    rv = userIntenService.execute(name,file1,rv,bds);
  }catch(Exception e){
    e.printStackTrace();
  }
  return rv;
}

 

 

/**
* 上传文件
* @param fileName
* @param Mfile
* @return
* @throws Exception
*/
@Override
public ResultVo execute(String fileName, File file1,ResultVo rv,List<Staff> bds) throws Exception{


// 初始化输入流
InputStream is = null;
List<String> msgList= new ArrayList();
try {

// 验证文件名是否合格
if (!validateExcel(fileName)) {

msgList.add(errorMsg);
rv.setList(msgList);
return rv;

  }

// 根据文件名判断文件是2003版本还是2007版本
boolean isExcel2003 = true;
if (isExcel2007(fileName)) {
  isExcel2003 = false;
}
// 根据新建的文件实例化输入流
is = new FileInputStream(file1);
// 根据版本选择创建Workbook的方式
Workbook wb = null;
try{
  wb = createWorkbook(is, isExcel2003);
}catch(Exception e){
  errorMsg="文件格式不对";
  msgList.add(errorMsg);
  rv.setList(msgList);
  return rv;
}
// 读取Excel里面客户的信息
rv = readExcelValue(wb,rv,bds);
is.close();

} finally {
  if (is != null) {

  try {
    is.close();
  } catch (IOException e) {
    is = null;
    e.printStackTrace();
  }
}

}
  return rv;

}

 

/**
* 验证EXCEL文件
*
* @param filePath
* @return
*/
public boolean validateExcel(String filePath) {
  if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {
    errorMsg = "文件名不是excel格式";
    return false;
  }
  return true;
}

 

/**
* 是否是2007的excel,返回true是2007
* @param filePath
* @return
*/
public boolean isExcel2007(String filePath) {
  return filePath.matches("^.+\\.(?i)(xlsx)$");
}

 

/**
* 根据版本选择创建Workbook的方式
*/
private Workbook createWorkbook(InputStream is, boolean isExcel2003) throws IOException {
  Workbook wb = null;
  // 当excel是2003时
  if (isExcel2003) {
    wb = new HSSFWorkbook(is);
  } else {// 当excel是2007时
    wb = new XSSFWorkbook(is);
  }
  return wb;
}

/***
* 这种方法支持03,和07版本的excel读取 但是对于合并的单元格,除了第一行第一列之外,其他部分读取的值为空
*
* @param is
* @throws ParseException
*/
@SuppressWarnings({ "unchecked", "rawtypes"})
public ResultVo readExcelValue(Workbook wb,ResultVo rv,List<Staff> bds) throws ParseException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String msg = "";
List<String> msgList= new ArrayList();
rv.setSuccess(false);
//获取当前所有的BD的 id 和 姓名
HashMap bdMap = new HashMap();
String BDName = "";
Long BDid = null;
for (Staff staff : bds) {
  BDid = staff.getId();
  BDName = staff.getName();
  bdMap.put(BDName,BDid);
}

for (int i = 0, len = wb.getNumberOfSheets(); i < len; i++) {
  Sheet sheet = wb.getSheetAt(i);
  if (sheet == null) {
    msg = "第" + i + "个sheet为空!";
    msgList.add(msg);
    rv.setList(msgList);
    return rv;
  }
  for (int j = 0; j <= sheet.getLastRowNum(); j++) {
    Row row = sheet.getRow(j);
    if (row == null) {
      msg = "第" + i + "个sheet, 第" + j + "行,存在空白行!";
      msgList.add(msg);
      rv.setList(msgList);
      return rv;
    }
    UserInten userInten = new UserInten();
    userInten.setUserSource("04");// 客户来源-表格导入
    userInten.setStatus("01");//已分配
    userInten.setUserStatus("00");//默认值:未注册
    userInten.setBdDate(sdf.parse(sdf.format(new Date())));//分配时间设置为导入时间
    // 读取每一个单元格
    for (int k = 0; k < row.getLastCellNum(); k++) {
      Cell cell = row.getCell(k);
      //校验表格字段名称是否为空
      if(j==0 && cell==null){
        msg="表格字段名称不可为空";
        msgList.add(msg);
        rv.setList(msgList);
        break;
      }
      // 校验联系方式是否为空
      if (j > 0 && k == 0 && null ==cell) {
        msg = "第" + i + "个sheet,第" + j+ "行,第" + k + "列,联系方式为空;";
        msgList.add(msg);
        rv.setList(msgList);
        break;
      }
      String cellValue = "";
      if(null != cell){
        cellValue = getValue(cell);
      }
      System.out.println("第" + i + "个sheet,第" + j + "行,第" + k+ "列:" + cellValue);
      // 字段名校验
      if (j == 0) {
        msg = valideExcelFormat(i, j, k, cellValue);
        if (!"".equals(msg)) {
          msgList.add(msg);
          rv.setList(msgList);
          return rv;
        }
      }

      // 校验手机号
      if (j > 0 && k == 0 && StringUtil.isNotBlank(cellValue)) {
        //校验手机号格式
        if (!RegexChk.checkCellPhone(cellValue)) {
          msg = "第" + i + "个sheet,第" + j + "行,第" + k + "列,联系方式格式错误;";
          msgList.add(msg);
          rv.setList(msgList);
          break;
        }
        //校验手机号是否已存在
        List<UserInten>list=userIntenDao.selectByMobile(cellValue);
        if(CollectionUtil.isNotEmpty(list)&&list.size()>0){
          msg = "第" + i + "个sheet,第" + j + "行,第" + k + "列,联系方式已存在;";
          msgList.add(msg);
          rv.setList(msgList);
          break;
        }
        userInten.setMobile(cellValue);
      }

          // 校验BD是否存在
          if (j > 0 && k == 3 && StringUtil.isNotBlank(cellValue)) {
            if (null == bdMap.get(cellValue)) {
              msg = "第" + i + "个sheet,第" + j + "行,第" + k + "列,所属BD姓名错误;";
              msgList.add(msg);
              rv.setList(msgList);
              break;
          }
          userInten.setBdId(bdMap.get(cellValue).toString());
          userInten.setBdName(cellValue);
        }
        // 录入数据库
        if (j > 0 && k == 1 && StringUtil.isNotBlank(cellValue)) {
          userInten.setCompanyName((cellValue));
        }
        if (j > 0 && k == 2 && StringUtil.isNotBlank(cellValue)) {
          userInten.setName((cellValue));
        }
        if (j > 0 && k == row.getLastCellNum() - 1) {
          userInten.setId(userInten.generateId());
          userIntenDao.insertSelective(userInten);
          userIntenDao.updateCIDByUserCID();
          userIntenDao.updateCIDBycoopCID();
          userIntenDao.updateUserStatusNotQualify();
          userIntenDao.updateUserStatusQualified();
        }
      }
      System.out.println("第" + j + "行,处理完毕");
    }
  }
  if(null == rv.getList()){
    rv.setSuccess(true);
  }
  return rv;
}

 

猜你喜欢

转载自www.cnblogs.com/Rage-Leila/p/8945903.html
今日推荐