总结
豆包 AI 助手文章总结

七牛私有空间资源访问时会时不时的出现401授权错误,同一个资源有时候能访问,有时候不能访问

php中文网
发布: 2016-06-06 20:23:16
原创
2027人浏览过

具体情况是:
某一个页面我需要从七牛私有空间请求三张证书图片资源,本地数据库中我存放的是这些证书的名称,在后台代码中我根据文件名来依次生成这些证书可以访问的私有链接地址,前端用的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
      */

    1. base64_urlSafeEncode($data)
      {

         $find = array('+', '/');
         $replace = array('-', '_');
         return str_replace($find, $replace, base64_encode($data));
      登录后复制

      }
      /**

    最佳 Windows 性能的顶级免费优化软件
    最佳 Windows 性能的顶级免费优化软件

    每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

    下载
    来源:php中文网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    豆包 AI 助手文章总结
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习
    PHP中文网抖音号
    发现有趣的

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号