vue3+srpingboot项目的数据表格

我想了解一下,
数据表格导入excel的所有处理逻辑,是在前端vue里处理还是在后端springboot里处理呢。

有没有能提供功能模块代码的

  • 一个文件选择导入按钮,然后提交之后后台数据库直接能显示新数据。

数据表格导入Excel的处理逻辑通常是在后端处理的,因为它需要对数据进行解析、验证和存储等操作,这些操作需要在后端完成
前端Vue可以负责文件上传和界面展示等功能

前端代码:

<template>
  <div>
    <input type="file" ref="fileInput" @change="handleFileUpload">
    <button @click="upload">上传</button>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  data() {
    return {
      file: null
    }
  },
  methods: {
    handleFileUpload() {
      this.file = this.$refs.fileInput.files[0]
    },
    upload() {
      let formData = new FormData()
      formData.append('file', this.file)
      axios.post('/api/upload', formData, {
        headers: {'Content-Type': 'multipart/form-data'}
      }).then(response => {
        console.log(response.data)
      }).catch(error => {
        console.log(error)
      })
    }
  }
}
</script>

后端代码:

@RestController
@RequestMapping("/api")
public class UploadController {
    
    @PostMapping("/upload")
    public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) {
        // 读取Excel文件并解析数据
        List<MyData> dataList = parseExcel(file);
        // 存储数据到数据库
        saveData(dataList);
        return ResponseEntity.ok().build();
    }
    
    private List<MyData> parseExcel(MultipartFile file) {
        List<MyData> dataList = new ArrayList<>();
        try (InputStream inputStream = file.getInputStream()) {
            Workbook workbook = WorkbookFactory.create(inputStream);
            Sheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                MyData data = new MyData();
                data.setName(row.getCell(0).getStringCellValue());
                data.setValue(row.getCell(1).getNumericCellValue());
                dataList.add(data);
            }
        } catch (IOException | InvalidFormatException e) {
            e.printStackTrace();
        }
        return dataList;
    }
    
    private void saveData(List<MyData> dataList) {
        // 存储数据到数据库
        // ...
    }
}

两种方式都可以,但是后端对于数据的处理更友好
后端进行Excel文件的读取和解析效率会更好。 可以更好地控制数据的安全性和完整性,可以充分利用后端服务器的处理能力。在后端Spring Boot中,可以使用一些现成的Excel读取库,例如Apache POI、EasyExcel等,或使用Spring Boot的MultipartFile接口来实现Excel文件的上传和读取。

一般还是后端处理吧,前端不应该做太多业务上的操作,前端应该更注重交互

前后端都能实现,一般放在后端,后端对数据校验,规则设定方便些

  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,数据表格导入excel的功能模块在前端vue还是后端springboot中实现需要进一步分析,通常来说,前端主要负责UI展示和用户交互,后端主要负责数据处理和存储。因此,可以根据实际需要考虑将部分逻辑放在前端或者后端实现。

    具体的处理逻辑可以分为以下几个步骤:

    1. 前端表单提交: 首先在前端界面中提供一个表单用于用户上传Excel文件,实现一个文件选择导入按钮。在提交表单时,需要将选择的Excel文件作为formData的一部分进行提交。可以使用axios或者fetch等网络库,将Excel文件发送到后端。下面是一个示例代码:
    <template>
      <form>
        <input type="file" ref="fileInput" @change="handleFileChange"/>
        <button type="submit" @click.prevent="handleSubmit">提交</button>
      </form>
    </template>
    
    <script>
    import axios from 'axios';
    
    export default {
      data() {
        return {
          file: null,
        }
      },
      methods: {
        handleFileChange(event) {
          this.file = event.target.files[0];
        },
        handleSubmit() {
          const formData = new FormData();
          formData.append('file', this.file);
          axios.post('/api/import', formData)
            .then(response => {
              // 处理响应结果
            })
            .catch(error => {
              // 处理错误
            });
        },
      },
    }
    </script>
    
    1. 后端Excel解析: 当收到前端上传的Excel文件后,后端需要对Excel进行解析。可以使用Apache POI等类库来实现,这里以spring-boot-starter-web为例,代码如下:
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    
    @RestController
    public class ExcelController {
    
        @PostMapping("/api/import")
        public void importExcel(@RequestParam("file") MultipartFile file) throws IOException {
            Workbook workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                for (Cell cell : row) {
                    // 处理Excel单元格数据
                }
            }
            workbook.close();
            // 存储数据到数据库
        }
    }
    
    1. 数据存储: 在解析Excel之后,可以将数据存储到后台数据库中。可以通过自定义DAO层代码和相关框架(如Mybatis或JPA)来实现。具体存储方式的选择也会影响到后续的查询和展示效果,需要根据实际业务需求进行抉择。

    总结: 上述代码示例是比较简单的实现方式,对于复杂或更详细的代码实现,还需要对具体情况进行深入研究。同时,在开发应用时,前后端分离可以让代码实现更加模块化,提高开发效率。