import BaseIo, { IhttpMethods } from '../base/io'; import BaseSupport from "../base/support"; import BaseDefine from "../base/define"; interface IsignParam { VERB: string } export default class { static getHeader(headers, name) { return headers[name] || ''; } static authorization(method, resource, sDate, headers) { var params = [ method.toUpperCase(), this.getHeader(headers, 'Content-Md5'), this.getHeader(headers, 'Content-Type'), sDate ]; var ossHeaders = {}; for (var key in headers) { var lkey = key.toLowerCase().trim(); if (lkey.indexOf('x-oss-') === 0) { ossHeaders[lkey] = ossHeaders[lkey] || []; ossHeaders[lkey].push(String(headers[key]).trim()); } } var ossHeadersList = []; Object.keys(ossHeaders).sort().forEach(function (key) { ossHeadersList.push(key + ':' + ossHeaders[key].join(',')); }); params = params.concat(ossHeadersList); var resourceStr = ''; resourceStr += resource; var subresList = []; if (subresList.length > 0) { resourceStr += '?' + subresList.join('&'); } params.push(resourceStr); var stringToSign = params.join('\n'); var auth = 'OSS ' + BaseDefine.upProjectDefine().ossAccessKeyId + ':'; return auth + this.signature(stringToSign); } static signature(stringToSign) { return BaseSupport.cryptoHmacBase64(stringToSign, BaseDefine.upProjectDefine().ossAccessKeySecret); }; static uploadBlob(sUrl: string, sLocalPath: string) { let sDate = BaseSupport.upGMT(new Date()); let header = { 'Authorization': '', 'Date': sDate, 'Content-Md5': '', 'Content-Type': 'image/jpeg' }; let sMethod: IhttpMethods = "PUT"; let sSign = this.authorization(sMethod, '/' + BaseDefine.upProjectDefine().ossBunkId + '/' + sUrl, sDate, header); header.Authorization = sSign; return BaseIo.putFile(sMethod, BaseDefine.upProjectDefine().ossServerUrl + '/' + sUrl, header, sLocalPath); } static upServerUrl(sUrl: string) { return BaseDefine.upProjectDefine().ossServerUrl + "/" + sUrl; } }