腾讯云-对象存储-签名失败

本文介绍了一种在使用腾讯云对象存储服务时遇到的文件上传签名问题,并详细解释了解决该问题的方法。通过调整签名生成逻辑,确保前端传入正确的路径参数,实现了文件的成功上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后台生成签名,返回给前台,用于上传文件。

后台源码:

/**
 * 腾讯云上传图片签名
 * 获取多次签名, 一段时间内有效, 针对上传文件,重命名文件, 创建目录, 获取文件目录属性, 拉取目录列表
 * 
 * @return
 */
@RequestMapping(value = "", method = RequestMethod.POST)
public String getTxyPeriodEffectiveSign(HttpServletRequest request) {
	// 需要签名的路径
	String cosPath = request.getParameter("cosPath");
	// 用户的身份信息, 包括appid, secret_id和secret_key
	Credentials cred = new Credentials(TXYun.APPID, TXYun.SECRETID, TXYun.SECRETKEY);
	try {
		// 签名过期时间
		Long expired = System.currentTimeMillis()/1000 + 180;
		// 调用腾讯云对象存储的SDK
		String sign = Sign.getPeriodEffectiveSign(TXYun.BUCKET, cosPath, cred, expired);
		return JacksonUtil.toBizJson("0", "签名成功", sign);
	} catch (AbstractCosException e) {
		e.printStackTrace();
		return JacksonUtil.toBizJson("0", "签名失败", null);
	}
}

前台使用签名,调用上传文件接口时报错,错误代码:-63 ERROR_PROXY_FILEID_NOTMATCH fileid与签名不匹配。
失败原因是被腾讯的JSSDK给误导了(也可能是我们理解错了)
下面是腾讯云对象存储的部分JSSDK(demo)源码:

//2.直接在浏览器前端计算签名,需要获取自己的accessKey和secretKey, 一般在调试阶段使用  
var self = this;  
var random = parseInt(Math.random() * Math.pow(2, 32));  
var now = parseInt(new Date().getTime() / 1000);  
var e = now + 60; //签名过期时间为当前+60s  
var path = '';//多次签名这里填空
var str = 'a=' + self.appid + '&k=' + sid + '&e=' + e + '&t=' + now + '&r=' + random +  
        '&f=' + path + '&b=' + self.bucket;  
  
var sha1Res = CryptoJS.HmacSHA1(str, skey);//这里使用CryptoJS计算sha1值,你也可以用其他开源库或自己实现  
var strWordArray = CryptoJS.enc.Utf8.parse(str);  
var resWordArray = sha1Res.concat(strWordArray);  
var res = resWordArray.toString(CryptoJS.enc.Base64);  
  
setTimeout(function () {//setTimeout模拟一下网络延迟的情况  
    callback(res);  
}, 1000);  
上面有一句代码:var path = '';//多次签名这里填空

当时前端调用我签名接口的时候,是没有上传这个path参数的,因为sdk里说可以为空。

前端是这么解决的。调签名接口时,传了cosPath = "/"。
这时候返回的签名是正确的,文件能正常上传。

腾讯云对象存储官方文档:https://cloud.tencent.com/document/api/436/7751

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值