欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用COS将文件上传至腾讯云

最编程 2024-08-11 12:13:47
...

最近在做项目的时候,很多次通过Cos将文件上传到腾讯云。腾讯官方也提供了专门的API接口(cloud.tencent.com/document/pr…

通过Cos上传的大体思路是这样的,第一步:实例化一个Cos。第二步:通过后端接口获取秘钥。第三步:选择需要上传的文件进行文件上传,上传成功之后,在回调函数中会返回文件的地址。第四步:再将这个地址通过后端接口保存到数据库中,就可以在项目中使用上传的文件。当然上传之前还需进行相关配置,Bucket: 存储桶 Bucket 的名称,命名规则为 BucketName-APPID,此处填写的存储桶名称必须为此格式。Region:Bucket 所在地域,枚举值请参阅 地域和访问域名:cloud.tencent.com/document/pr…

1、安装cos-js-sdk-v5

npm install cos-js-sdk-v5 --save

2、引入cos-js-sdk-v5我这里是局部引入,当然也可以在main.js里面全局引入。

import Cos form 'cos-js-sdk-v5'

3、实例初始化Cos

// 初始化上传文档实例
created(){
    this.cos = new Cos({ 
      getAuthorization: this.getDocSignature
    })
},
methods: {
    // 获取上传文档签名
    getDocSignature(options, callback) {
      const that = this
      $.ajax({
        url: '后台提供的请求地址', // 获取客户端上传签名的 URL
        type: 'GET',
        dataType: 'json',
        success(result) { // result 是派发签名服务器的回包
          if (result.code === statusCode.SUCCESS) {
            const fileKey = JSON.parse(result.data.fileKey).data
            callback({
              TmpSecretId: fileKey.credentials.tmpSecretId,
              TmpSecretKey: fileKey.credentials.tmpSecretKey,
              XCosSecurityToken: fileKey.credentials.sessionToken,
              ExpiredTime: fileKey.expiredTime
            })
          } else {
            // 获取秘钥失败的相关操作
          }
        }
      })
    },
    uploadDoc() { // 调取文档上传相关接口
      this.cos.sliceUploadFile({
        Bucket: '99999',  // 桶的名字,命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
        Region: '地区',   //Bucket所在的区域
        Key: this.fileObj.name,
        Body: this.fileObj, // 文件的信息
      }, (err, data) => {
        if (!err && data) {
          this.fileName = this.fileObj.name
          this.key = data.Key
          this.fileId = data.Key
          this.cos.getObjectUrl({ // 获取文件访问地址
            Method: 'PUT',
            Key: this.key,
            Bucket: 'aaa',
            Region: '地区',
            Sign: false
          }, (err, data) => {
            if (!err) { // 文档地址
              this.fileUrl = data.Url
            } else {
              this.$message.error('上传失败')
            }
          })
        } else {
          this.$message.error('上传失败')
        }
      })
}

秘钥可以是永久的也可以是临时的,由于密钥放在前端会暴露 SecretId和SecretKey,所以把永久密钥过程放在后端,前端通过发送一个ajax请求获取临时秘钥,这样安全性会更高。

推荐阅读