springboot实现后端文件上传
/**
* @author zf
* @since 2022-7-18
* 对应的工具类
*/
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.extension.service.IService;
import com.max.back.demo.entity.Bcodename;
import com.max.back.demo.entity.Bproject;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class BprojectListener extends AnalysisEventListener<Bproject> {
/**
* 每次保存的条数最多为100条
*/
private static final int BATCH_COUNT = 100;
/**
* 定义需要用到的service类
*/
private final IService<Bproject> service;
private final IService<Bcodename> service2;
public BprojectListener(IService<Bproject> service,IService<Bcodename> service2) {
this.service = service;
this.service2=service2;
}
List<Bproject> list = new ArrayList<Bproject>();
@Override
public void invoke(Bproject bproject, AnalysisContext analysisContext) {
list.add(bproject);
if (list.size() > BATCH_COUNT) {
this.saveData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
this.saveData();
}
/**
* 保存数据到数据库里,对excel中的数据进行一个个遍历,先进行判断数据库里有没有该数据,有的话则进行下一个,没有则保存
*/
public void saveData() {
Bcodename bcode;
for (Bproject data : list) {
try {
if (service.query().eq("project_name", data.getProjectName()).count() == 0) {
bcode = service2.query().eq("value",data.getTypeId()).one();
data.setTypeId(bcode.getId());
data.setId(UUID.randomUUID().toString().replaceAll("-", ""));
service.save(data);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* @author zf
* @since 2022-7-18
* 对应的controller
*/
@PostMapping("/upload")
public ResponseResult<PageInfo<Map<String, Object>>> upload(MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
int index = fileName != null ? fileName.lastIndexOf(".") : -1;
if (index < 0) {
return ResponseResult.getMessageResult(null, "A001");
}
String suffix = fileName.substring(index + 1);
if (!"xlsx".equals(suffix) && "xls".equals(suffix)) {
return ResponseResult.getMessageResult(null, "A002");
}
try{
EasyExcel.read(file.getInputStream(),Bproject.class,new BprojectListener(ser,ser2 )).sheet().doRead();
}catch (Exception e){
return ResponseResult.getMessageResult(null,"A002");
}
return ResponseResult.getMessageResult(null,"A000");
}
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* @author zf
* @since 2022-7-18
* 项目信息实体类
* @ExcelProperty对应上传的文件的列名
* @TableName为实体类对应表名
* @TableField为实体类对应表的属性名
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("project")
public class Bproject implements Serializable {
private static final long serialVersionUID = 1L;
@TableId("id")
private String id;
@ExcelProperty(value="项目名")
@TableField("project_name")
private String projectName;
@ExcelProperty(value = "项目类型")
@TableField("type_id")
private String typeId;
@ExcelProperty(value = "项目实施地点")
@TableField("location")
private String location;
@ExcelProperty(value = "项目介绍")
@TableField("express")
private String express;
@ExcelProperty(value = "项目价格")
@TableField("price")
private Float price;
}
postman进行测试