文件上傳到后台並在后台讀取解析


文件上傳的前端比較簡單,

html:

<div class="modal-body">
<!--multiple="multiple" 表示可以選多個文件-->
<input type="file" id="file" >
</div>

js:

function uploadFile() { var file=$("#file");
    console.log("file",file)
var tmp=file[0].files[0];

if(tmp){
var formdata = new FormData();
formdata.append("file",tmp);
console.log("33",formdata);
$.ajax({
url: "station/org/files",
type: "post",
data:formdata,
dataType: "json",
processData: false, // 告訴jQuery不要去處理發送的數據
contentType: false, // 告訴jQuery不要去設置Content-Type請求頭
success: function (res) {
console.log("上傳文件返回信息",res);
if("0"==res.status){
layer.alert(res.message||"文件上傳成功");
$("#uploadFile").modal("hide");
            //清空文件框的顯示內容
            
$("#file").val("");
$("#file")[0].files[0]="";
          }else{
        layer.alert(res.message||"文件上傳失敗"
}
}
 });
}
}



java:
controller:
@PostMapping("files")
@ApiOperation(value="文件上傳請求")
public ResultData file(@RequestParam("file") MultipartFile file)throws IOException {
return peOrgService.uploadFile(file);
}
service:
 public ResultData uploadFile(MultipartFile file) throws IOException{
//創建返回對象,把每行中的值作為一個數組,所有行作為一個集合返回
List<String[]> list = new ArrayList<String[]>();
StringBuffer sb=new StringBuffer();
try {
log.info("上傳文件名",file);
/*檢查文件是否傳輸過來*/
if(null==file||"".equals(file)){
return ResultData.failed(-1,"上傳文件為空");
}
String fileName = file.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf('.'));
System.out.print("suffix:"+suffix);
if(!(suffix.equals(excel2003L)||suffix.equals(excel2007U))){
return ResultData.failed(-1,"上傳文件格式不對,請上傳excell文件");
}

/*中文文件名亂碼,為文件換新名字,讀取后刪除該文件,故可以不用理會文件亂碼問題*/
String newFileName = new Date().getTime() + suffix;
String path = "F:/test/";
File newFile = new File(path + newFileName);
/*如果父文件夾不存在,則創建*/
File fileParent = newFile.getParentFile();
if (!fileParent.exists()) {
fileParent.mkdirs();
}
/*開始讀取excell並插入數據庫*/

//獲得Workbook工作薄對象
Workbook workbook = getWorkBook(file);

if(workbook != null){
for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
//獲得當前sheet工作表
Sheet sheet = workbook.getSheetAt(sheetNum);
if(sheet == null){
continue;
}
//獲得當前sheet的開始行
int firstRowNum = sheet.getFirstRowNum();
//獲得當前sheet的結束行
int lastRowNum = sheet.getLastRowNum();
//循環除了第一行的所有行
for(int rowNum = firstRowNum+1;rowNum <= lastRowNum;rowNum++){
//獲得當前行
Row row = sheet.getRow(rowNum);
if(row == null){//當前行為空
continue;
}
//獲得當前行的開始列
int firstCellNum = row.getFirstCellNum();
//獲得當前行的列數
int lastCellNum = row.getPhysicalNumberOfCells();
String[] cells = new String[row.getPhysicalNumberOfCells()];
//循環當前行
for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
Cell cell = row.getCell(cellNum);
cells[cellNum] = getCellValue(cell);
}
list.add(cells);
}
}
workbook.close();
}
System.out.print("excell的對象:"+list);
/*刪除保存在本地的excell*/
newFile.delete();

//list 為整個excell的對象數組
for(int i=0;i<list.size();i++){
String[] str=list.get(i);
if(str.length<8){
int num=i+1;
String st="第"+num+"行信息不正確";
sb.append(st);
continue;
}

AddUserParam param=new AddUserParam();
param.setUserId(str[0]);//工號
param.setRealName(str[1]);//姓名
param.setIdNumber(str[2]);//身份證號
/*通過機構名獲取機構號*/
String ogNo= peOrgMapper.getOrgNoByName(str[3]);
param.setOrgId(ogNo);//機構號

param.setPhone(str[4]);//手機號
param.setContinueTime(str[5]);//有效期
param.setUserType(new Integer(str[6]));//用戶類型
param.setEmployeeFlag(str[7]);//是否行員
param.setOnduty(str[8]);//在崗狀態
// if(checkParam(param)){
// int num1=i+1;
// String str1="表格第"+num1+"行"+error.get();
// sb.append(str1);
// continue;
//// throw new Exception(str1);
// }
log.info("用戶批量導入注冊:{}",param);
UserInfoRawDTO dto = peUserMapper.getUserInfoRaw(param.getUserId());
if(dto != null && StringUtils.isNotBlank(dto.getUserId())){
UpdateUserParam tempParam = CastUtil.cast(new UpdateUserParam(),param);
this.updateUser(tempParam);
continue;
}
String operator = CurrentUserUtil.getCurrentUserDTO().getUserId();
PeUserLogin record = CastUtil.cast(new PeUserLogin(),param);
record.setPassword(OauthUtil.pass(record.getPassword()));
record.setPassword2(OauthUtil.pass(record.getPassword2()));
record.setPasswordstate(String.valueOf(PeUserLoginEnum.PASSWORDSTATE_INIT.code));
record.setStatus(StatusEnum.NORMAL.code);
record.setEnable(StatusEnum.YES.code);
record.setCreator(operator);
record.setCreateTime(new Date());
int result = peUserMapper.add(record);
if(result > 0) continue;

}
} catch (Exception e) {
e.printStackTrace();
e.getMessage();
return ResultData.failed(-1,"aaaaa");
}finally {
return ResultData.ok(RetCode.OK,sb.toString());
}

}

public static Workbook getWorkBook(MultipartFile file) {
//獲得文件名
String fileName = file.getOriginalFilename();
//創建Workbook工作薄對象,表示整個excel
Workbook workbook = null;
try {
//獲取excel文件的io流
InputStream is = file.getInputStream();
//根據文件后綴名不同(xls和xlsx)獲得不同的Workbook實現類對象
if(fileName.endsWith("xls")){
//2003
workbook = new HSSFWorkbook(is);
}else if(fileName.endsWith("xlsx")){
//2007
workbook = new XSSFWorkbook(is);
}
} catch (IOException e) {
e.getMessage();
}
return workbook;
}
@CheckParams
@Transactional(rollbackFor = Exception.class)
public ResultData updateUser(UpdateUserParam param){
log.info("修改用戶信息:{}",param);
String operator = CurrentUserUtil.getCurrentUserDTO().getUserId();
PeUserLogin record = CastUtil.cast(new PeUserLogin(),param);
record.setPasswordstate(String.valueOf(PeUserLoginEnum.PASSWORDSTATE_INIT.code));
record.setLastUpdUser(operator);
record.setLastUpdDatetime(new Date());
int result = peUserMapper.update(record);
if(result > 0) return ResultData.ok();
return ResultData.failed(RetCode.FAILED);
}
public static String getCellValue(Cell cell){
String cellValue = "";
if(cell == null){
return cellValue;
}
//把數字當成String來讀,避免出現1讀成1.0的情況
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
cell.setCellType(Cell.CELL_TYPE_STRING);
}
//判斷數據的類型
switch (cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC: //數字
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING: //字符串
cellValue = String.valueOf(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN: //Boolean
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA: //公式
cellValue = String.valueOf(cell.getCellFormula());
break;
case Cell.CELL_TYPE_BLANK: //空值
cellValue = "";
break;
case Cell.CELL_TYPE_ERROR: //故障
cellValue = "非法字符";
break;
default:
cellValue = "未知類型";
break;
}
return cellValue;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM