在這之前, 可以去看一下其他人的答案, 本文只針對腳本做出少量修改.傳送門
js腳本做出以下修改:
/*
創(chuàng)建待簽名字符串
此方法為簡化版岩灭,僅處理不帶url參數(shù)的oss資源地址碉熄,其他情況可結(jié)合oss文檔 + ali-oss sdk 文件內(nèi)signUtil模塊內(nèi)的buildCanonicalString方法做修改
*/
function buildCanonicalString (method, resourcePath, date) {
var signContent = [method.toUpperCase(), '', '', date, resourcePath]
return signContent.join('\n')
}
/* 計算簽名字符串 */
function computeSignature (accessKeySecret, canonicalString) {
var signature = require('crypto').createHmac('sha1', accessKeySecret)
return signature.update(canonicalString.toUTF8()).digest('base64')
}
/* 生成完整認證字符串 */
function authorization (accessKeyId, accessKeySecret, canonicalString) {
return 'OSS ' + accessKeyId + ':' + computeSignature(accessKeySecret, canonicalString)
}
/* oss簽名配置數(shù)據(jù)生蚁,換成你自己的PAM賬號的AK和bucket */
var ossAccess = {
accessKeyId: 'accessKeyId',
accessKeySecret: 'accessKeySecret',
bucket: 'bucket'
}
var GMTdate = '';
/* 返回oss header date字符串 */
function getGMTtime (r) {
/* 函數(shù)運行在http環(huán)境,如果有多個server最好加上判斷條件來避免不必要的消耗 */
if (r.headersIn.host !== 'oss.kagenz.com') return '';
/* nginx 環(huán)境下 toUTCString 函數(shù)和標準有差異思喊, 此處做轉(zhuǎn)換處理,后續(xù)njs版本升級后可能需要修改 */
var currentDate = new Date();
var currentDateUTCStr = currentDate.toUTCString();
var dateStrs = currentDateUTCStr.split(' ');
/* 這里需要改動一下處理方式 */
var result = dateStrs[0] + ' ' + dateStrs[1] + ' ' + dateStrs[2] + ' ' + dateStrs[3] + ' ' + dateStrs[4] + ' GMT';
GMTdate = result;
return result;
}
/* 返回oss header authorization字符串 */
function ossSign (r) {
if (r.headersIn.host !== 'oss.kagenz.com') return ''
var method = r.method
var canonicalString = buildCanonicalString(method, '/' + ossAccess.bucket + r.uri, GMTdate)
return authorization(ossAccess.accessKeyId, ossAccess.accessKeySecret, canonicalString)
}
/* 這里需要添加export */
export default { getGMTtime, ossSign };