springboot实现文件上传

77 阅读1分钟

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;

}

image.png

postman进行测试