上传文件解析Excel和图片小demo

今天需要实现一个文件上传的功能点,写了一个小demo,用于记录。

一、上传Excel文件

本项目使用的是Vue+from表单+axios的方式传递数据,后台用SpringBoot接收数据。

1. HTML

<h1>Excel解析页面</h1>
<form  >
    <p>文件上传</p>
    <input type="file" name="file" ref="inputer">
    <p><input type="button" @click="btnSubmit3()" value="提交"></p>
</form>

2.vue的方法

btnSubmit3(){
    var formData = new FormData()
    // this.$refs.inputer是vue中获取dom元素的方法
    // 通过files就可以拿到所有上传的文件,如果是多个文件循环即可
    formData.append( 'file',this.$refs.inputer.files[0])
    axios.post("/schools/upload",formData).then((res)=>{
        console.log(res.data);
        this.schoolClass=res.data;
    });
}

3.导入Maven配置

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16</version>
</dependency>

如果保存请使用3.16的版本,报错原因多半是因为版本号不一致。

4.编写工具类

public class ExcelUtils {

    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtils.class);

    public static List<SchoolClass> excelToShopIdList(InputStream inputStream) {
        List<SchoolClass> list = new ArrayList<>();
        Workbook workbook = null;
        try {
            // 根据传递过来的文件输入流创建一个workbook对象(对应Excel中的工作簿)
            workbook = WorkbookFactory.create(inputStream);
            // 创建完成,关闭输入流
            inputStream.close();
            //获取工作表对象,即第一个工作表 (工作簿里面有很多张工作表,这里取第一张工作表)
            Sheet sheet = workbook.getSheetAt(0);
            //获取工作表的总行数
            System.out.println(sheet.getLastRowNum());
            int rowLength = sheet.getLastRowNum() + 1;
            //System.out.println("总行数有多少行" + rowLength);
            //获取工作表第一行数据
            Row row = sheet.getRow(0);
            //获取工作表总列数的长度
            int colLength = row.getLastCellNum();
            //System.out.println("总列数有多少列" + colLength);
            // 创建一个单元格对象
            Cell cell = null;

            // 双重循环 因为一个单元格由行和列的索引下表构成
            for (int a = 1; a < rowLength; a++) {
                // 创建一个学生实体类对象
                SchoolClass sc = new SchoolClass();
                for (int b = 0; b < colLength; b++) {
                    // 分别取出第 a行 b列的单元格数据
                    cell = sheet.getRow(a).getCell(b);
                    // 设置单元格的类型是String类型
                    cell.setCellType(CellType.STRING);
                    // 获取单元格的数据
                    String stringCellValue = cell.getStringCellValue();
                    // System.out.println(cell.getStringCellValue());
                    // 通过列来进行判断要赋值的属性
                    switch (b) {
                        case 0:
                            sc.setBjbh(stringCellValue);
                            break;
                        case 1:
                            sc.setBjmc(stringCellValue);
                            break;
                    }
                }
                list.add(sc);
            }
        } catch (Exception e) {
            LOGGER.error("parse excel file error :", e);
        }
        System.out.println(list);
        return list;
    }
}

5.后台程序

@PostMapping("/upload")
@ResponseBody
public List<SchoolClass> ExcelParse(@RequestParam("file") MultipartFile file, Model model) throws Exception {
    String name=file.getOriginalFilename();
    System.out.println(name);

    if(!name.substring(name.length()-5).equals(".xlsx")){
        model.addAttribute("error","文件解析错误");
        return null;
    }
    List<SchoolClass> list = ExcelUtils.excelToShopIdList(file.getInputStream());
    model.addAttribute("msg",list);
    System.out.println(list);
    return list;
}

二、上传图片文件

通过from表单的方式上传图片

1.导入Maven配置

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version>
</dependency>

2.HTML代码

<form enctype="multipart/form-data" method="post" action="schools/uploadImage">
    文件:<input type="file" name="fileUpload"/>
    <input type="submit" value="上传"/>
</form>

3.后台接收代码

@PostMapping("/uploadImage")
@ResponseBody
public String upload(MultipartFile fileUpload){
    //获取文件名
    String fileName = fileUpload.getOriginalFilename();
    //获取文件后缀名
    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    //重新生成文件名
    fileName = UUID.randomUUID()+suffixName;
    //指定本地文件夹存储图片,写到需要保存的目录下
    String filePath = "D:\\__easyHelper__\\";
    try {
        //将图片保存到static文件夹里
        fileUpload.transferTo(new File(filePath+fileName));
        //返回提示信息
        return "上传成功";
    } catch (Exception e) {
        e.printStackTrace();
        return "上传失败";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值