SpringBoot:处理post上传的multipart文件(excel)

本文涉及jar包版本:


     org.apache.poi
     poi-ooxml
     4.1.0
 

贴一个简单的前端请求

let form = new FormData();
form.append('file', this.file);
this.$axios({
  method:"post",
  url: "/upload",
  headers:{
    'Content-type': 'multipart/form-data'
  },
  data:form
}).then(
  res=>{
  },err =>{
  });

controlle层
如果需要保存上传的文件,可以用以下代码,如果不需要保存,可直接进service层

@ResponseBody
@PostMapping(value = "/upload)
public ResponseVo uploadNewBug(@RequestParam("file") MultipartFile file){

    // 获取文件名,包含后缀
    String fileName = file.getOriginalFilename();
    // 获取文件后缀
    String prefix = fileName.substring(fileName.lastIndexOf("."));
    // 保存文件名
    String saveFileName = String.valueOf(System.currentTimeMillis()) + prefix;
    // 保存路径
    String saveFilePath = "/yourpath";
    // 保存文件
    File saveFile = new File(saveFilePath + saveFileName);

    try {
        file.transferTo(saveFile);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return service.upload(saveFile);
      
}

service层

 @Override
 public ResponseVo upload(File file) {

     // 需要返回的实体类
     ResponseVo responseVo = new ResponseVo();
     try {
         InputStream is = new FileInputStream(file);
         Workbook workbook = new XSSFWorkbook(is);
         // 如果有多个sheet需要遍历去处理,这里只拿单sheet举例
         Sheet sheet = workbook.getSheetAt(0);
         // 获取标题行,如果有多行标题,自行控制下方行遍历的起始行数即可
         Row titleRow = sheet.getRow(0);
         
         // 表格行数
         for (int i = 1;i < sheet.getLastRowNum() + 1; i++){
             Row row = sheet.getRow(i);
             // xxxxxx 行处理
             for(int j =0;j

你可能感兴趣的:(SpringBoot)