javascript
<el-upload
ref="upload"
:action="aaa"
:on-change="importProject"
name="excelFile"
multiple
:auto-upload="false"
:show-file-list="false"
>
<el-button type="warning">导入</el-button>
</el-upload>
action 属性应是一个上传地址 URL 字符串
action如果不用的话可以随便传一个参数,但是不能省略
multiple:能同时上传多个表格
auto-upload="false":表示选择文件后不自动上传,而是通过按钮点击触发上传。
:show-file-list="false":不展示导入的文件名称
javascript
importProject(file) {
const fd = new FormData()
fd.append('file', file.raw)
this.excelToJSONs(fd)//把文件传给后端
// console.log('文件', file)
// console.log('fd', fd)
}
javascript
getMessage() {
this.$refs.upload.clearFiles()
},
this.$refs.upload.clearFiles(): 清空上传组件中的文件显示,把这句话加在想清空文件显示的函数里
可能的错误:
Required request part 'file' is not present
错误的代码:fd.append('file', file)
原因:看似正确地添加了 file 字段,但传入的是整个 file 对象(其实是 el-upload 返回的一个封装对象),而不是原生的 File 对象。
解决:改为fd.append('file', file.raw)
Current request is not a multipart request
原因:通常是因为后端期望接收一个 multipart/form-data 格式的请求(即文件上传格式),但前端发送的是其他格式(如 JSON)
解决:用FormData()
补充:
浏览器无法获取用户电脑上文件的"真实本地路径"(如 C:\xxx\xxx.xlsx),这是出于安全机制。
可以获取到的是:
文件对象 (File):用于读取内容或上传
文件名、大小、类型等基本信息
如果需要预览,可以生成临时 URL(URL.createObjectURL(file))
javascript
importProject(file) {
console.log('完整文件对象:', file)
// 文件名
console.log('文件名:', file.name)
// 文件大小(字节)
console.log('文件大小:', file.size)
// 文件类型
console.log('文件类型:', file.type)
// 保存原始 File 对象,供后续处理用
this.selectedExcelFile = file.raw
}