完成图片上传云服务器(私人账号)

127 阅读2分钟

存储在第三方云服务器(阿里云,腾讯云,七牛云等...)

第三方云有专门存储图片的服务器(桶),自己公司的服务器只需要存储图片地址即可

示例腾讯云申请配置

使用腾讯云服务创建一个免费的云存储

1 进入腾讯云官网:腾讯云 产业智变·云启未来 - 腾讯 (tencent.com)

2 点击右上角免费注册,注册成功后进行实名认证。

3 在首页搜索对象存储,然后点击立即使用。 image.png

4 在对象存储首页创建存储桶。
输入自己想要的名称,选择公有读私有写 image.png

5 设置cors规则: 在左侧 存储桶列表 中,点击刚创建的存储桶,再次点击左侧 安全管理 中的 跨域访问CORS设置  点击 添加规则 然后按照自身需求配置规则

6 配置云API秘钥:私人账号登录的服务器属于个人,需要一定的权限才能自由上传图片,这个负责权限验证的其实就是秘钥。拥有秘钥是进行上传的基础条件; 首次生成秘钥在下图搜索框 搜索 访问秘钥; 然后在API秘钥管理中新建秘钥即可 image.png

安全性提示

实际工作中,秘钥属于敏感信息,不能直接放到前端存储,容易产生安全问题,更好的做法是把秘钥交给后端管理,前端通过调用接口先获取秘钥,有了秘钥之后再进行上传操作

以上我们就完成了准备工作~

编辑器中使用

安装腾讯云 js-sdk

npm i cos-js-sdk-v5
yarn add cos-js-sdk-v5

使用 Element 的 Upload 上传组件

<template>
    <el-upload
      class="avatar-uploader"
      action="" //最好不删除
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload"
      :http-request="upLoadImage"
      >
      <img v-if="value" :src="value" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    </el-upload>
</template>

<script>
import COS from 'cos-js-sdk-v5' //引入包  必要可在 package.json 中输入版本号 '^1.4.17'
export default {
  props: {
    value: {
      type: null,
      required: true,
    }
  },
  data() {
    return {

    };
  },
  methods: {
    // 选择图片上传
    upLoadImage(e) {
      const file = e.file
      // console.log(e.file)
      const cos = new COS({
        SecretId: '填入秘钥id',
        SecretKey: '填入秘钥key'
      }) // 完成cos对象的初始化
      cos.putObject({
        Bucket: '填入存储桶名称', 
        Region: 'ap-nanjing', // 地域名称
        Key: e.file.name, // 文件名称
        StorageClass: 'STANDARD', // 固定值
        Body: file // 文件对象
      }, (err, data) => {
        if (data.statusCode === 200 && data.Location) {
          // 拿到腾讯云返回的地址
          this.$emit('input', 'http://' + data.Location) // 将地址返回给父组件
        } else {
          this.$message.error(err.Message) // 上传失败提示消息
        }
      })
    },
    handleAvatarSuccess(res, file) {
      this.value = URL.createObjectURL(file.raw);
    },
    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;
    }
  }
}
</script>

<style>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>

SDK方法可进入腾讯云 文档中心 进行查看 (顶部导航栏 客户支持)