php401是无法找到资源吗,七牛私有空间资源访问时会时不时的出现401授权错误,同一个资源有时候能访问,有时候不能访问...

具体情况是:

某一个页面我需要从七牛私有空间请求三张证书图片资源,本地数据库中我存放的是这些证书的名称,在后台代码中我根据文件名来依次生成这些证书可以访问的私有链接地址,前端用的AngularJS框架,后台代码如下:

$coach_cert = new coach_cert ();

$results = $coach_cert->listCerts ( $this->coach_id );

//七牛空间密钥

$accessKey = '';

$secretKey = '';

// 私有空间名称

$bucket = '';

// 时间戳生成

$now = time ();

$date = $now + 60;

// 下载凭证生成

foreach ( $results as &$result ) {

$download_url = "http://" . $bucket . ".7xnhmh.com2.z0.glb.qiniucdn.com/" .$result ['filename']. "?e=" . $date;

$sign = hash_hmac ( "sha1", $download_url, $secretKey, true );

$encodedSign = base64_encode ( $sign );

$token = $accessKey . ":" . $encodedSign;

$realdownloadurl = $download_url . "&token=" . $token;

$result ['filename'] = $realdownloadurl;

}

return [

'certs' => $results

];

现在的问题是:点击查看三张证书,有时候三张证书全部能加载出来,有时候只能加载部分,不能加载的在控制台报401授权失败的错误:error: "download token auth failed"

回复内容:

具体情况是:

某一个页面我需要从七牛私有空间请求三张证书图片资源,本地数据库中我存放的是这些证书的名称,在后台代码中我根据文件名来依次生成这些证书可以访问的私有链接地址,前端用的AngularJS框架,后台代码如下:

$coach_cert = new coach_cert ();

$results = $coach_cert->listCerts ( $this->coach_id );

//七牛空间密钥

$accessKey = '';

$secretKey = '';

// 私有空间名称

$bucket = '';

// 时间戳生成

$now = time ();

$date = $now + 60;

// 下载凭证生成

foreach ( $results as &$result ) {

$download_url = "http://" . $bucket . ".7xnhmh.com2.z0.glb.qiniucdn.com/" .$result ['filename']. "?e=" . $date;

$sign = hash_hmac ( "sha1", $download_url, $secretKey, true );

$encodedSign = base64_encode ( $sign );

$token = $accessKey . ":" . $encodedSign;

$realdownloadurl = $download_url . "&token=" . $token;

$result ['filename'] = $realdownloadurl;

}

return [

'certs' => $results

];

现在的问题是:点击查看三张证书,有时候三张证书全部能加载出来,有时候只能加载部分,不能加载的在控制台报401授权失败的错误:error: "download token auth failed"

您的签名有问题,我们是使用safebase64编码,你可以参考我们的源码

https://github.com/qiniu/php-sdk/blob/a864511adb2e50b2b0f080440e6f11d6989905ec/src/Qiniu/functions.php

URL 安全的 Base64 编码适用于以 URL 方式传递 Base64 编码结果的场景。该编码方式的基本过程是先将内容以 Base64 格式编码为字符串,然后检查该结果字符串,将字符串中的加号+换成中划线-,并且将斜杠/换成下划线_,同时尾部保持填充等号=。

/**

对提供的数据进行 urlsafe 的 base64 编码。

*

@param string $data 待编码的数据,一般为字符串

*

@return string 编码后的字符串

@link http://developer.qiniu.com/docs/v6/api/overview/appendix.html#urlsafe-base64

*/

base64_urlSafeEncode($data)

{

$find = array('+', '/');

$replace = array('-', '_');

return str_replace($find, $replace, base64_encode($data));

}

/**

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值