如何使用Element-Plus+SpringBoot3实现手动上传文件?

一、问题及其原因

环境准备:Vue3+Element-Plus+SpringBoot3+axios

        在我的毕设中出现了这样一个问题,使用原生的form标签或者PostMan上传文件时不会出现错误,一旦使用Element-Plus中的el-upload组件上传文件时,后端老是出现如下错误:

Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required part 'file' is not present.]

        查询了很多资料才发现忽视了最重要的问题,el-upload组件中的文件对象和SpirngBoot中

的MultipartFile不匹配,所以才会导致后台不能接受参数。el-upload组件中的文件对象名为:UploadFile。

        先来看看原生form表单中的file对象:

         在来看看el-upload组件中的file对象:

 对比发现,在el-upload组件中的对象除了file以外还包含文件的基本信息。

        下面是UploadFile对象源码:

interface UploadFile {
  name: string
  percentage?: number
  status: UploadStatus
  size?: number
  response?: unknown
  uid: number
  url?: string
  raw?: UploadRawFile
}
interface UploadRawFile extends File {
  uid: number
}

所以,在后端想使用MultipartFile接口 接收参数,不能将整个UploadFile对象作为参数传递。

二、代码部分

1.前端使用el-upload组件上传文件:

    <el-upload v-model:file-list="fileList" action="#" list-type="picture-card" :auto-upload="false" :limit="2">
        <el-icon>
            <Plus />
        </el-icon>
    </el-upload>
    <el-button>取消</el-button>
    <el-button @click="uploadFile">提交</el-button>

说明:

        v-model:file-list="fileList" 用于接收文件列表

        :auto-upload="false" 取消自动提交

        :limit="2" 限制文件个数

2.对数据进行封装并发送ajax请求:

//接收上传的文件
const fileList = ref([])
//上传文件
const uploadFile = () => {
    if (fileList.value.length > 0) {
        // 封装为FromData对象
        const fromData = new FormData()
        fileList.value.forEach((val) => {
            console.log('val.raw :>> ', val.raw);
            fromData.append('file', val.raw)
        })
        // 发送ajax请求,上传文件
        if (fromData != null) {
            request.post('/upload', fromData, {
                headers: {
                    'Content-Type': 'multipart/form-data',
                }
            })
        }
    }
}

注意:

        1.必须指定请求头 'Content-Type': 'multipart/form-data'

        2.此处我对axios进行了封装

3.后端Controller接收参数

    // @CrossOrigin(origins ="*" ,maxAge = 3600)
    @PostMapping("/upload")
    @ResponseBody
    public Object upload(@RequestParam MultipartFile[] file) {
        for (int i = 0; i < file.length; i++) {
            System.out.println(file[i].toString());
        }
        return "success";
    }

注意:如果出现ajax跨域问题,跨域使用 @CrossOrigin 注解

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学籍管理系统是一个用于管理学生的基本信息、课程信息和成绩信息的系统。基于Vue3、Element Plus、Spring Boot、MyBatis、JPA和MySQL的学籍管理系统具有以下特点和功能。 1. 前端界面使用Vue3和Element Plus框架,实现了美观、简洁的用户界面,提供了良好的用户体验。 2. 后端使用Spring Boot作为应用框架,简化了系统的搭建和开发。同时,基于MyBatis和JPA技术实现与数据库的交互,提供高性能和灵活性。 3. 数据库使用MySQL,存储学生的基本信息、课程信息和成绩信息,保证了数据的持久性和安全性。 4. 学籍管理系统提供了学生信息的录入、查询和修改功能。管理员可以通过界面录入学生的基本信息,包括姓名、学号、性别、年龄等。同时,还可以查询和修改学生的信息,确保信息的准确性。 5. 系统还提供了课程信息的管理功能。管理员可以录入课程的名称、学分、教师等信息,方便学生选课和教师进行课程管理。 6. 学籍管理系统还包括成绩管理功能。管理员可以录入学生的成绩,系统会自动计算学生的平均成绩和绩点,并提供成绩查询功能,方便学生和教师查看学生成绩。 7. 系统还提供了权限管理功能,确保只有授权用户可以进行相关操作,保证了数据的安全性。 综上所述,基于Vue3、Element Plus、Spring Boot、MyBatis、JPA和MySQL的学籍管理系统具有方便、快捷、安全、准确的特点,能够有效管理学生的基本信息、课程信息和成绩信息。在教育领域的学籍管理中具有重要的应用价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值