Element Plus 的 Upload 组件通常用于处理文件选择、上传进度、文件列表展示等场景。实际开发中,有一种需求非常常见:用户选择文件后并不立即上传,而是先完成表单填写、校验或预览,点击“提交”按钮之后,再统一执行上传。
这就是 Element Plus Upload 手动上传。
很多问题并不是文件本身导致的,而是没有正确理解 auto-upload、submit()、before-upload、http-request、file-list 等属性和方法之间的关系。尤其是在 Vue 3 + Element Plus 项目中,如果直接按照普通自动上传方式修改代码,很容易出现“选择了文件但没有上传”“调用 submit() 没有反应”“后端收不到文件”等问题。
下面结合常见使用场景,对 Element Plus Upload 手动上传的实现方式、核心原理以及常见故障进行系统分析。
一、Element Plus Upload手动上传的核心原理
Element Plus 的 Upload 组件默认会在用户选择文件后自动执行上传流程。
例如:
vueaction="/api/upload" > type="primary">选择文件
用户选择文件以后,组件会自动向 action 指定的地址发起请求。
如果希望由业务代码控制上传时机,需要关闭自动上传:
vueref="uploadRef" action="/api/upload" :auto-upload="false" > type="primary">选择文件
此时:
vue:auto-upload="false"
是整个手动上传流程的关键。
文件选择完成后,Upload 组件只负责把文件放入待上传列表,并不会立即向服务器发送请求。
点击提交按钮时,再调用:
JavaScriptuploadRef.value.submit()
即可触发上传。
完整结构通常如下:
vueref="uploadRef" action="/api/upload" :auto-upload="false" > type="primary">选择文件 type="success" @click="handleUpload"> 开始上传