在处理 el-upload 上传组件在上传失败时可以使用 on-error钩子函数来显示后端返回的错误信息
//html 区域
<el-upload class="upload-demo" ref="upload" :headers="headers" :action="excelUploadApi"
:on-change="handleChange" :on-error="handleError" :show-file-list="false">
<el-button slot="trigger" class="filter-item" type="warning" size="small"
icon="el-icon-upload">
导入按钮
</el-button>
</el-upload>
//利用 :on-error="handleError" 钩子函数
但在打印出返回的err 发现返回的格式不是能简单获取的。我在网上搜索到两种大神的解决方案,在此记录下,以便以后遇到~
方案一
直接通过 JSON.parse() 去转换 err.message 而不是转换 err
handleError(err, file, fileList) { //上传失败钩子函数
console.log('err', err)
console.log('err', JSON.parse(err.message))
if (file.status == 'fail') {
this.$message.error(JSON.parse(err.message).message)
}
}
方案二
把错误信息转成字符串,然后去掉" Error: " ,剩下的内容就是个json,然后再转成对象
handleError(err, file, fileList) { //上传失败钩子函数
console.log('err', err)
let myError=err.toString();//转字符串
myError=myError.replace("Error: ","") // 去掉前面的" Error: "
myError=JSON.parse(myError);//转对象
console.log(myError);
}
在我的项目中使用的部分,手动上传的过程上传成功后显示成功信息
注意在这个地方on-success部分只写方法名即可,不用携带参数
<el-form-item label="file" :label-width="formLabelWidth">
<el-upload
class="upload-demo"
drag
ref="upload"
action="http://127.0.0.1:5000/upload_user_dict_excel"
:auto-upload="false"
:on-success="success"
:data="{'language':form.language,'type':form.type}">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
</el-upload>
</el-form-item>
<el-button type="primary" @click="submitDilog('form')">确 定</el-button>
methods
submitDilog(formName){
if(this.add_type){
let data=new FormData()
data.append("language",this.form.language)
data.append("type",this.form.type)
data.append("error",this.form.error)
data.append("suggestions",this.form.suggestions)
data.append("info",this.form.info)
axios.post("http://127.0.0.1:5000/upload_user_dict",data).then(res=>{
alert(res.data.message)
})
this.dialogFormVisible = false
this.form.error="",
this.form.suggestions='',
this.form.info= '',
this.form.type='拼写自定义',
this.form.language='英文'
}else{
//手动提交
this.$refs.upload.submit()
this.dialogFormVisible = false
}
}
success(response,file,fileList){
alert(response.message)
}