前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序图片上传到COS,求提供完整的前端+后端java计算签名代码

小程序图片上传到COS,求提供完整的前端+后端java计算签名代码

原创
作者头像
用户4518175
修改2019-03-14 18:03:52
1.9K1
修改2019-03-14 18:03:52
举报
代码语言:javascript
复制
//java后端计算签名
    public static String signateForCOS(String method,String key) {
        try {
            String bucketName = BUCKET_NAME;
            COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
            COSSigner signer = new COSSigner();
            //设置过期时间为 1 个小时
            Date expiredTime = new Date(System.currentTimeMillis() + 3600L * 1000L);
            // 要签名的 key, 生成的签名只能用于对应此 key 的上传
            //String key = "/userImage";
            HttpMethodName methodName = null;
            switch(method.toLowerCase()){
                case "post":
                    methodName = HttpMethodName.POST;
                    break;

                case "get":
                    methodName = HttpMethodName.GET;
                    break;
                case "put":
                    methodName = HttpMethodName.PUT;
                    break;
            }

            String sign = signer.buildAuthorizationStr(methodName, key, cred, expiredTime);
            logger.info("参数信息:"+methodName+"  "+key);
            logger.info("/userImage算的签名信息是:{}", sign);
            return sign;
        } catch (Exception e) {
            logger.error("signateForCOS error ,info is " + e);
        }
        return "";

    } 

小程序前台代码:

代码语言:javascript
复制
 var cos = new COS({
  getAuthorization: function(params, callback) { //获取签名 必填参数

    // 方法一(推荐)服务器提供计算签名的接口

    wx.request({
      url: app.globalData.urlPath + '/wechat/getSign',
      data: {
        Method: params.Method,
        Key: params.Key
      },
      dataType: 'text',
      success: res => {
        var res = res.data
        console.log("接口返回结果:"+res)
        //var json = JSON.parse(res);
        //console.log("签名信息:" + res['data'])
        callback(res);
      }
    });

    // 方法二(适用于前端调试)
    /** 
    var authorization = COS.getAuthorization({
      SecretId: config.SecretId,
      SecretKey: config.SecretKey,
      Method: params.Method,
      Key: params.Key
    });
    console.log("authorization is "+authorization)
    callback(authorization);
    */
  }
});

最后为什么还是返回AccessDenied禁止访问呢?签名的计算过程有问题吗?还是在哪里有问题

代码语言:javascript
复制
<Error>
	<Code>AccessDenied</Code>
	<Message>Access Denied.</Message>
	<Resource>gxtdlm-1258532084.cos.ap-beijing.myqcloud.com/wx114f04180b885f25.o6zAJs4_u9NmbTbvfTrLTVgRE9h0.6ZggaTp0lNhDd6c19a88e2e6d2a626487e7a487d78a5.jpeg</Resource>
	<RequestId>NWM4OWM4MGNfZGMyOTVkNjRfNDcyY18xOTU4YTFk</RequestId>
	<TraceId>OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTQyYWVlY2QwZTk2MDVmZDQ3MmI2Y2I4ZmI5ZmM4ODFjMTIyODZmMTQ1NWFiZTE0NGQ1ZDFiNmU5YWY4MmNkMzc=</TraceId>
</Error>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档