Vue2ElementUi封装一个能把图片上传到腾讯云的组件

431 阅读3分钟

思路:

套路.jpg

这个组件的封装借用elementUi的组件 upload 组件,在它的基础上进行二次封装,这个组件的作用顾名思义就是上传组件

先去官网复制它的代码,让项目跑起来看看效果

upload组件1.jpg

自定义上传配置

关键属性::http-request="upload" action="#"

注意:

使用自定义行为覆盖默认上传,注意一旦设置自定义上传行为之后,所有的上传操作都需要自己实现,比如数据处理,上传成功之后的后续操作,on-success 钩子函数也不会继续触发

如图:

el-upload中的属性,和它们的作用。

upload组件2.jpg

其中on-success这个属性返回的回调是给默认上传行为用的,所以如果要使用自定义上传行为,那就不需要这个属性了,删掉它后用:http-request(自定义上传行为(重点))

属性beforeUpload是干嘛用的

upload组件3.jpg

属性:http-request的使用

属性:http-request是自定义上传的时候用到的属性,如果使用它那么就要删除on-success

upload5.jpg

upload4.jpg

全局注册(准备工作):

// 全局注册组件
// 省略其他...
import UploadImg from '@/components/UploadImg'

// 1.定义插件(拓展Vue的功能)
const Myplugin = {
install (Vue) {
 // 省略其他...
 Vue.component()
}
}

前置准备:

  1. 在云服务器上的准备:申请cos服务器,配置秘钥,设置cors访问 2.在代码层面上的准备:

(1)下载一个官方提供的操作cos服务的包(cos-js-sdk-v5)

(2) 用自己的密钥去实例化cos(文档上有)

实例化cos对象.jpg

(3) 然后再具体做上传功能

使用cos对象完成上传.jpg

存储桶和所在地域:

存储桶名字和地域.jpg

判断成功后 data中的Location就是图片的地址:

上传成功后data中的本地图片地址.jpg

完成这些步骤后就开始实现功能:用前边注册的对象存储功能,将图片上传到腾讯云,根据cos的上传API实现上传功能

腾讯云文档地址

再添加一个上传时的进度条:

先在文档实例中找到这段代码:

upload组件进度条.jpg

通过console打印得知progressData中的percent代表的就是进度条百分比 进度条的百分比.jpg

准备好数值后,到elemenUi中找到progress组件并使用它;这个组件很简单,改变:percentage就可以实现控制百分比效果

element的进度条.jpg

所以说,把progressData中的percent的值*100后赋值给:percentage就可以实现图片加载和进度条同步了

percentage存到data里.jpg

这时出现了一个this指向的问题,因为这行代码在复制过来的时候并不是箭头函数,所以它的this指向指向的并不是我项目中的data,这时要把该函数改成箭头函数。

改成了箭头函数的形式.jpg

这样就完成了功能。

小小的优化一下进度条:

在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指向!)