一、准备工作
在使用腾讯云之前,需要先注册账号,开启对象存储,并且创建储存桶
这些信息在后面的操作中需要用到
![](https://img.haomeiwen.com/i26621755/d0041d2faf4b9000.png)
具体设置配置按照个人需求设置即可。
创建密钥
记住这个密钥配置的地方,容易找不到
![](https://img.haomeiwen.com/i26621755/1875495f0ba40497.png)
二、密钥的使用
![](https://img.haomeiwen.com/i26621755/2b670741ebf3f215.png)
// 下面的代码是固定写法
const COS = require('cos-js-sdk-v5')
// 填写自己腾讯云cos中的key和id (密钥)
const cos = new COS({
SecretId: 'xxxx', // 身份识别ID
SecretKey: 'xxxx' // 身份秘钥
})
三、结构搭建,定义事件
![](https://img.haomeiwen.com/i26621755/0699f5132378d576.png)
<el-upload
class="avatar-uploader"
action="#"
:show-file-list="false"
:http-request="upload"
:before-upload="beforeAvatarUpload"
>
<img v-if="value" :src="value" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon" />
<el-progress v-show="showProgress" :percentage="percentage" />
</el-upload>
</div>
定义参数:
![](https://img.haomeiwen.com/i26621755/e1a33407532b2419.png)
![](https://img.haomeiwen.com/i26621755/16a7ff493a972621.png)
![](https://img.haomeiwen.com/i26621755/b4f8279915c844b9.png)
四、子组件封装
自定义上传操作:
![](https://img.haomeiwen.com/i26621755/00269a73a5998a8e.png)
upload(obj) {
// 自定义上传操作 obj.file 用户选中的文件
// 1. 用腾讯云cos 的api把obj.file上传
// 2. 拿到它回传的图片的地址,显示出来
if (!obj.file) {
return
}
console.log('要上传的文件是', obj.file)
this.showProgress = true
// 执行上传操作
cos.putObject({
Bucket: 'sy132-1258898967', /* 存储桶 */
Region: 'ap-nanjing', /* 存储桶所在地域,必须字段 */
Key: obj.file.name, /* 上传到存储桶之后,叫什么文件名? */
StorageClass: 'STANDARD', // 上传模式, 标准模式
Body: obj.file, // 上传文件对象
onProgress: (progressData) => {
console.log('上传进度表', JSON.stringify(progressData))
this.percentage = progressData.percent * 100
}
}, (err, data) => {
console.log(err || data)
// 上传成功之后
if (data.statusCode === 200) {
this.$emit('input', `https://${data.Location}`)
// this.imageUrl = `https://${data.Location}`
}
this.showProgress = false
})
},
通过自定义事件input将腾讯云上存储的值传给父组件,,,这里是将v-model拆分成原生方式书写,相当于分别给子组件绑定了value自定义属性以及input自定义事件
上传之前的格式规范:
![](https://img.haomeiwen.com/i26621755/85889eafce7979ee.png)
beforeAvatarUpload(file) {
// const isJPG = file.type === 'image/jpeg'
// const isLt2M = file.size / 1024 / 1024 < 2
// if (!isJPG) {
// this.$message.error('上传头像图片只能是 JPG 格式!')
// }
// if (!isLt2M) {
// this.$message.error('上传头像图片大小不能超过 2MB!')
// }
// return isJPG && isLt2M
return true
}
五、父组件封装
父组件插入组件,双向绑定用户的头像地址,并且在data,userInfo中补充staffPhoto属性
![](https://img.haomeiwen.com/i26621755/138be7641cf5d7e8.png)
之后只需在获取用户详情时,给staffPhoto赋值即可,因为v-model是双向绑定
![](https://img.haomeiwen.com/i26621755/8df5000cae8bb0d7.png)
网友评论