思路:
这个组件的封装借用elementUi的组件 upload 组件,在它的基础上进行二次封装,这个组件的作用顾名思义就是上传组件
先去官网复制它的代码,让项目跑起来看看效果
自定义上传配置
关键属性::http-request="upload" action="#"
注意:
使用自定义行为覆盖默认上传,注意一旦设置自定义上传行为之后,所有的上传操作都需要自己实现,比如数据处理,上传成功之后的后续操作,on-success 钩子函数也不会继续触发
如图:
el-upload中的属性,和它们的作用。
其中on-success这个属性返回的回调是给默认上传行为用的,所以如果要使用自定义上传行为,那就不需要这个属性了,删掉它后用:http-request(自定义上传行为(重点))
属性beforeUpload是干嘛用的
属性:http-request的使用
属性:http-request是自定义上传的时候用到的属性,如果使用它那么就要删除on-success
全局注册(准备工作):
// 全局注册组件
// 省略其他...
import UploadImg from '@/components/UploadImg'
// 1.定义插件(拓展Vue的功能)
const Myplugin = {
install (Vue) {
// 省略其他...
Vue.component()
}
}
前置准备:
- 在云服务器上的准备:申请cos服务器,配置秘钥,设置cors访问 2.在代码层面上的准备:
(1)下载一个官方提供的操作cos服务的包(cos-js-sdk-v5)
(2) 用自己的密钥去实例化cos(文档上有)
(3) 然后再具体做上传功能
存储桶和所在地域:
判断成功后 data中的Location就是图片的地址:
完成这些步骤后就开始实现功能:用前边注册的对象存储功能,将图片上传到腾讯云,根据cos的上传API实现上传功能
再添加一个上传时的进度条:
先在文档实例中找到这段代码:
通过console打印得知progressData中的percent代表的就是进度条百分比
准备好数值后,到elemenUi中找到progress组件并使用它;这个组件很简单,改变:percentage就可以实现控制百分比效果
所以说,把progressData中的percent的值*100后赋值给:percentage就可以实现图片加载和进度条同步了
这时出现了一个this指向的问题,因为这行代码在复制过来的时候并不是箭头函数,所以它的this指向指向的并不是我项目中的data,这时要把该函数改成箭头函数。
这样就完成了功能。
小小的优化一下进度条:
在data中定义布尔值 showProgress:false 默认为false,然后为el-progress组件绑定v-show="showProgress"在上传动作之前,让该进度条显示就是让showProgress:true,当上传成功后将它改为showProgress:false
总结步骤:
1. 先安装包:cos-js-sdk-v5
2. 实例化COS对象:这里用到秘钥
3. cos.putObject:用到存储桶的名字,区域
4. 完成上传功能,添加进度条并优化一下(注意箭头函数的this指向!)