具體情況是:
某一個頁面我需要從七牛私人空間請求三張認證圖片資源,本機資料庫中我存放的是這些認證的名稱,在後台代碼中我根據檔案名稱來依次產生這些認證可以訪問的私人連結地址,前端用的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 安全的 Base 64 編碼適用於以 URL 方式傳遞 Base 64 編碼結果的情境。該編碼方式的基本過程是先將內容以 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));
}
/**