Vue Element Upload组件自定义上传行为及值回填
问题由于项目使用element-ui,然后upload默认上传方式不支持我们现有接口。参照了一下官方API及相关博客,解决了我现有问题。解决方式自定义上传:upload组件提供了一个http-request属性,官方给的描述是:覆盖默认的上传行为,可以自定义上传的实现值的回填:upload组件提供了一个file-list属性,描述:上传的文件列表具体代码实现自定义上传行为...
·
问题
由于项目使用element-ui,然后upload默认上传方式不支持我们现有接口。参照了一下官方API及相关博客,解决了我现有问题。
解决方式
- 自定义上传:upload组件提供了一个
http-request
属性,官方给的描述是:覆盖默认的上传行为,可以自定义上传的实现
- 值的回填:upload组件提供了一个
file-list
属性,描述:上传的文件列表
#具体代码实现
自定义上传行为
这里使用图片上传作为实例
template部分
<el-upload
action="https://up-z2.qbox.me"
list-type="picture-card"
:http-request="uploadImg"
:on-success="uploadImgSuccess"
:on-remove="handleRemove">
<i class="el-icon-plus"></i>
</el-upload>
以上是template部分,我们实现了http-request
, on-success
, on-remove
三个属性
script部分
methods: {
uploadImg (f) {
this.axios.get('./getToken').then((response) => {//获取token
let param = new FormData(); //创建form对象
param.append('file',f.file);//通过append向form对象添加数据
param.append('token',response.data.token);//通过append向form对象添加数据
param.append('key',response.data.key);//添加form表单中其他数据
let config = {
headers:{'Content-Type':'multipart/form-data'}
}; //添加请求头
this.axios.post(f.action,param,config)//上传图片
.then(response=>{
f.onSuccess(response.data)
})
.catch(({err}) => {
f.onError()
})
})
.catch(() => {
f.onError()
})
},
uploadImgSuccess(response, file, fileList) {
// 缓存接口调用所需的文件路径
console.log('文件上传成功')
},
handleRemove(file, fileList) {
// 更新缓存文件
console.log('文件删除')
}
}
值回填
同样以图片上传为例
template部分
<el-upload
action="https://up-z2.qbox.me"
list-type="picture-card"
:http-request="uploadImg"
:on-remove="handleRemove"
:on-change="handleImgChange"
:file-list="imgList">
<i class="el-icon-plus"></i>
</el-upload>
script部分
data() {
return {
imgList: [{url: '初始需回填的图片url', status: 'finished'}]
}
},
methods: {
uploadImg (f) {
this.axios.get('./getToken').then((response) => {//获取token
let param = new FormData(); //创建form对象
param.append('file',f.file);//通过append向form对象添加数据
param.append('token',response.data.token);//通过append向form对象添加数据
param.append('key',response.data.key);//添加form表单中其他数据
let config = {
headers:{'Content-Type':'multipart/form-data'}
}; //添加请求头
this.axios.post(f.action,param,config)//上传图片
.then(response=>{
f.onSuccess(response.data)
})
.catch(({err}) => {
f.onError()
})
})
.catch(() => {
f.onError()
})
},
handleImgChange (file, fileList) {// 这里可以打印file查看数据结构
if (file.response) {//判断是否上传成功
this.imgList.push({url: this.tools.cdn(file.response.key), status: 'finished'})//上传成功之后把值添加到imglist中
}
},
handleRemove (file, fileList) {// 这里可以打印filelist查看数据结构
this.imgList = fileList//删除某张图片时重新对imglist赋值
}
}
写在最后
一直想把这个记下来,比较懒惰一看好久没有写博客了。由于是在我们工程里改的,暂时还没有写demo。如有问题,请大家指教
更新
看到一些小伙伴反应的问题,验证之后也发现了一些问题,感谢各位的反馈
更多推荐
已为社区贡献3条内容
所有评论(0)