用户头像上传

发布时间:2024年01月22日

将用户上传的头像存储在腾讯云存储桶里

注册腾讯云

https://cloud.tencent.com/login

创建存储桶

配置跨域

来源 * (任何都可以访问)

put get post 请求都可以

点击概览,查看存储桶基本信息

记录保存存储桶名称和地域

找到api密钥管理,新建密钥

https://console.cloud.tencent.com/cam/capi

记录

SecretId

SecretKey

1

安装腾讯云js-sdk

?npm i cos-js-sdk-v5?

使用el-upload自定义上传

<el-upload
    class="avatar-uploader"
    action=""
    :show-file-list="false"
    :before-upload="beforeAvatarUpload"
    :http-request="uploadImage"
  >
    <img v-if="value" :src="value" class="avatar">
    <i v-else class="el-icon-plus avatar-uploader-icon" />
  </el-upload>

相关属性查阅elementui文档

value为父组件v-model绑定在子组件上,通过props传过来的值

https://element.eleme.cn/#/zh-CN/component/upload

import COS from 'cos-js-sdk-v5'
export default {
  props: {
    value: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      imageUrl: ''
    }
  },
  methods: {
    beforeAvatarUpload(file) {
      const isJPG = ['image/jpeg', 'image/png', 'image/gif', 'image/bmp'].includes(file.type)
      const isLt2M = file.size / 1024 / 1024 < 5

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG JPEG PNG BMP 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 5MB!')
      }
      return isJPG && isLt2M
    },
    uploadImage(params) {
      const cos = new COS({
        SecretId: '',
        SecretKey: ''
      })
      cos.putObject({
        Bucket: '', // 存储桶名称
        Region: '', // 地域名称
        Key: params.file.name, // 文件名称
        StorageClass: 'STANDARD', // 固定值
        Body: params.file // 文件对象
      }, (err, data) => {
        if (data.statusCode === 200 && data.Location) {
          // 拿到了腾讯云返回的地址
          // 通过input自定义事件将地址传出去
          this.$emit('input', 'http://' + data.Location) // 将地址返回了
        } else {
          this.$message.error(err.Message) // 上传失败提示消息
        }
      }) // 完成cos对象的初始化
    }
  }
}

填上储存桶的名称和地域

以及SecretId: '',
? ? ? ? SecretKey: ''

文章来源:https://blog.csdn.net/weixin_68854196/article/details/135748428
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。