如何在ElementUI的上传组件el-upload中设置header

在vue项目中我们发送ajax请求一般都会使用axios,并在axios中设置axios.defaults.baseURL,请求的基本地址,并在请求拦截器中设置headers

import { getToken } from '@/libs/util'

// 请求拦截
axios.interceptors.request.use(configInfo => {
	if(!configInfo.noToken) {
		// 发送请求需带上token
		let token = getToken()
		config.headers.Authorization = token		
	}
    return configInfo
})

使用 el-upload上传组件时,action 为必选参数,上传的地址。

但此时我们为action填写地址不能不写基本地址而仅写upload,要写完整的地址。

这是因为el-upload上传组件在上传发送请求时,不会去使用我们设置的 axios,而是在组件内部自己封装了自己的请求方法。所以我们必须把地址写完整。

那有时在上传时会报出错误,例如“无效token”,这是因为我们没有为此上传请求设置请求头部。el-upload 组件有一个属性 headers ,设置上传的请求头部。

<el-upload
	ref="uploadFile"
	:action="uploadUrl"
	:headers="headerObj"
	accept=".xls,.xlsx,.jpg,.png,.jpeg,.bmp,.doc"
	:before-upload="beforeUpload"
	:on-change="handleChange"
	:on-remove="handleRemove"
	:on-success="handleSuccess"
	:file-list="fileList"
>
	<el-button size="small" type="primary">点击上传</el-button>
	<div slot="tip" class="el-upload__tip">只能上传图片、word、excel文件</div>
</el-upload>

在data中定义headerObj

data() {
 	return {
 		uploadUrl: process.env.VUE_APP_BASE_URL + 'api/common/uploadFile'
 		headerObj: {
			Authorization: getToken()
		},
		fileList: []
 	}
 }

使用时需要注意的坑:如果action是动态的,action属性不能及时响应数据更新,总是晚一步。
解决方法:需要让它异步,或给它加个延时器。

  1. 将auto-upload属性设置为false,

  2. 使用on-change,在on-change钩子中,去判断文件后缀,来确定文件类型,来确定调用不同的接口

  3. 通过ref属性去执行上传

beforeUpload(file) {
	if(/\.(mp4|m3u8|rmvb|avi|swf|3gp)$/.test(file.name)) {
		this.ruleForm.uploadUrl = this.vidoeUploadUrl
	} else {
		this.ruleForm.uploadUrl = this.fileUploadUrl
	}
	this.$nextTick(()=>{
		this.$refs.uploadFile.submit()
	})
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Komorebi゛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值