首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >COS小程序获取签名问题?

COS小程序获取签名问题?

提问于 2019-09-20 16:14:18
回答 3关注 1查看 1.7K

想在小程序上传文件到腾讯云,参考的代码:https://github.com/tencentyun/cos-wx-sdk-v5/blob/master/demo/demo-sdk.js

,获取签名用的格式一、(推荐)后端通过获取临时密钥给到前端,前端计算签名,由于没有后台配合,就写了个小程序获取签名的云函数,代码如下:

调试的时候一直报错,信息如下:

{"Code":"InvalidParameter.GrantOtherResource","Message":"[QC_STS] cant grant other resource"}

代码语言:js
复制
// 云函数入口文件
const cloud = require('wx-server-sdk')
// 临时密钥服务例子
var STS = require('qcloud-cos-sts');

const tencentcloudConfig = require("./config");

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return new Promise((resolve, reject) => {
    // 在 3 秒后返回结果给调用方(小程序 / 其他云函数)
    getTemSecret(resolve, reject)

  })
}

// 配置参数
var config = {
  secretId: tencentcloudConfig.tecentSecretId,
  secretKey: tencentcloudConfig.tecentSecretKey,
  proxy: '',
  durationSeconds: 1800,
  bucket: tencentcloudConfig.tecentCosBucket,
  region: tencentcloudConfig.tecentRegion,
  allowPrefix: 'test/*',
  // 简单上传和分片,需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/14048
  allowActions: [
    'name/cos:PostObject',
  ],
};


// 格式一:临时密钥接口
function getTemSecret(resolve, reject) {

  // 获取临时密钥
  var LongBucketName = config.bucket;
  var ShortBucketName = LongBucketName.substr(0, LongBucketName.indexOf('-'));
  var AppId = LongBucketName.substr(LongBucketName.indexOf('-') + 1);
  var policy = {
    'version': '2.0',
    'statement': [{
      'action': config.allowActions,
      'effect': 'allow',
      'principal': { 'qcs': ['*'] },
      'resource': [
        // 'qcs::cos:ap-guangzhou:uid/' + AppId + ':prefix//' + AppId + '/' + ShortBucketName + '/' + config.allowPrefix,
        'qcs::cos:' + config.region+':uid/' + AppId + ':prefix//' + AppId + '/' + ShortBucketName + '/' + config.allowPrefix,
      ],
    }],
  };
  var startTime = Math.round(Date.now() / 1000);
  STS.getCredential({
    secretId: config.secretId,
    secretKey: config.secretKey,
    proxy: config.proxy,
    durationSeconds: config.durationSeconds,
    policy: policy,
    region: config.region
  }, function (err, tempKeys) {
    var result = JSON.stringify(err || tempKeys) || '';
    result.startTime = startTime;
    resolve(result); 
  });
}

//------------------小程序云函数的package.json--------------------
{
  "name": "tecentCos",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "wx-server-sdk": "latest",
    "body-parser": "^1.18.3",
    "cross-env": "^5.2.0",
    "express": "^4.16.4",
    "qcloud-cos-sts": "^3.0.2"
  }
}

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档