在vue中如何实现前端导入文件发送给后端进行数据库记录的批量添加

需求:在前端导入需要添加的信息的excel表,实现记录的批量插入
效果
在vue中如何实现前端导入文件发送给后端进行数据库记录的批量添加_第1张图片

实现过程:

1、前端

(1)前端UI

 <div class="text-h2 pa-12">
   <a  href="这里填写你的文件路径(注:在vue项目中这个文件的路径需要放在你的此vue文件的同级目录下,否则可能找不到文件,且文件名最好不要有中文)" download="法律信息导入模板(此处为下载文件的命名).xlsx">点击下载法律信息导入模板</a>
   <v-file-input
         id="mulinput"
         show-size
         accept=".xls,.xlsx"
         label="点击选择文件,文件格后缀为:.xls、.xlsx"
   ></v-file-input>
   <br>
   <v-btn  color="#3CB371" style="color:white;" @click="uploadFile">确认导入</v-btn>
 </div>

(2)前端js
前后端分离使用async…await…进行异步请求,这里使用的是vue-axios,在main.js中引入配置即可

async uploadFile () {
   if (document.getElementById('mulinput').files[0] === undefined) {
     alert('请先选择需要导入的文件!')
   } else {
     var formData = new window.FormData()
     formData.append('file', document.getElementById('mulinput').files[0])
     if (confirm('是否确认导入') === true) {
       const { data: fileres } = await this.$http.post('/lawuploadexcel(此处填写你后端接口的路径)', formData)
       if (fileres.res === 'true') {
         alert('导入成功')
       } else {
         alert('导入数据失败,请查看表格格式是否正确!')
       }
     } else {
       alert('已取消文件导入操作!')
     }
   }
 }

2、后台接口部分

//    使用文件批量导入法律信息
@PostMapping("/lawuploadexcel")
@ResponseBody
public String lawupload(MultipartFile file) throws IOException, InvalidFormatException {
    // 拿到上传的excel表
    BufferedInputStream bis = new BufferedInputStream(file.getInputStream());
    Workbook workbook = WorkbookFactory.create(bis);
    // 获取sheet工作表,这里我的 表名为law
    Sheet sheet = workbook.getSheet("law");
    // 获取表总行数
    int num = sheet.getLastRowNum();
    // 逐行执行插入语句
    System.out.println(num);
    for (int i = 1; i<=num; i++){
        Row row = sheet.getRow(i);
        // 获取每一列的数据
        Cell cell1 = row.getCell(0);
        // 这里需要将表数据转化为String类型
        cell1.setCellType(CellType.STRING);
        Cell cell2 = row.getCell(1);
        cell1.setCellType(CellType.STRING);
        Cell cell3 = row.getCell(2);
        cell1.setCellType(CellType.STRING);
        // 去除导入文件中的空白行
        if (cell1.getStringCellValue().equals("")){
            break;
        }else {
            Calendar now = Calendar.getInstance();
            law laws = new law();
            laws.setLawtitle(cell1.getStringCellValue());
            laws.setLawcontext(cell2.getStringCellValue());
            laws.setLauthor(cell3.getStringCellValue());
             // 向数据库插入法律信息,lawservices.addlaw是我写的将数据插入数据库的方法
            String res = lawservices.addlaw(laws);
        }
    }
    return "{\"res\":\""+true+"\"}";
}

注:这里导入的excel文件会自动默认第一行为标题,所以第一行不会算为一条需要导入的记录
导入的文件
在vue中如何实现前端导入文件发送给后端进行数据库记录的批量添加_第2张图片
在vue中如何实现前端导入文件发送给后端进行数据库记录的批量添加_第3张图片

导入成功后数据库
在vue中如何实现前端导入文件发送给后端进行数据库记录的批量添加_第4张图片

你可能感兴趣的:(基础,小功能,前端,vue.js,后端)