import { requestEncode, responseDecode } from "./protoMap" //import util from '../common/util' const URL = 'https://test.ohplay.radio1964.net/Ohplay/Web/HttpToTcp'; function post(request) { let requestBuffer = requestEncode(request) return uni.request({ url: URL, header: { "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-protobuf", 'Token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VyaWQiOjY1MDYzMywibmFtZSI6IjE4MTI2NDQ3MDE1IiwiZXhwIjoxNjIyODg0NTA1fQ.f7jIm0856-VnynA99MBoA2Dl1pePxI0HT_ECsUp5QHA' }, method: 'POST', timeout: 15000, dataType: 'protobuf', responseType: 'text', data: requestBuffer }).then((res) => { for (let response of res) { if (response !== null && response !== undefined && response.statusCode === 200) { try { console.log(response); let resJson = JSON.parse(response.data) //转化成json对象 console.log(resJson); if (resJson.code === 0) { let base64Str = resJson.data; //let base64Str = 'DQMAAAAVAQAAAB0CAAAAJeoDAABKlgEKBBICb2sSjQFleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKVmMyVnlhV1FpT2pZNE5EQXhNQ3dpYm1GdFpTSTZJalFpTENKbGVIQWlPakUyTWpNME9EWTRNamg5LlNzRlgzdWJ5UFp4NWRCLXJzZHNDd3NGcjlpLUpJczFXeWJBS2pBS3pwdzQ=' let buffer = Buffer.from(base64Str, 'base64') let data = responseDecode(buffer) console.log(data); let code = 0 let msg = "success" if (typeof data.errInfo !== 'undefined') { code = data.errInfo.errorCode if (typeof data.errInfo.errorMessage === 'string') { msg = data.errInfo.errorMessage } else { msg = Buffer.from(data.errInfo.errorMessage).toString() } } return { code: code, msg: msg, data: data } } else { return { code: resJson.code, msg: resJson.info } } } catch (e) { return { code: -1, msg: e.toString() } } } } }) } const policy = '{"expiration": "2120-01-01T12:00:00.000Z","conditions": [["content-length-range", 0, 104857600]]}'; const OSSAccessKeyId = "LTAICUWe9r9tRcPB"; const accessKeySecret = "gCZSuqdztp6X1n2xMaCqzhnBSWVJv6"; //这个是policy编码成base64,使用base64编码的方法需要引入require("crypto-js"); 一下子多了300多kb,所以这里直接写死 const policyBase64 = "eyJleHBpcmF0aW9uIjogIjIxMjAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsImNvbmRpdGlvbnMiOiBbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwMF1dfQ==" //这个是policyBase64经过accessKeySecret的HmacSHA1 加密,然后再base64,需要引入require("crypto-js"); 一下子多了300多kb,所以这里直接写死 const signature = "h2Kwvb9pXKgtWUuw99iHrHQV9fk=" const OSS_URL = 'https://airsmart-photo1.oss-cn-shanghai.aliyuncs.com' /** * 这个是加密的方法 * 参考用的 */ function HmacSHA1test() { //const HmacSHA1 = require("crypto-js/hmac-sha1"); let policyBase64 = util.encodeBase64(policy) console.log(policyBase64); // let str = util.decodeBase64(policyBase64); // console.log(str); //获取加密参数 const sha1 = HmacSHA1(policyBase64, accessKeySecret); console.log(`sha1 = ${sha1}`); const sign = base64.stringify(sha1); console.log(`sign = ${sign}`); } function uploadFile(filePath, contentType) { let arr = filePath.split('.') let suffix = arr[arr.length - 1] let date = new Date(); let dateStr = `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()}` let ossPath = `wx/${dateStr}/${date.getTime()}.${suffix}` return uni.uploadFile({ url: OSS_URL, filePath: filePath, name: 'file', formData: { 'key': ossPath, 'success_action_status': 200,///如果该域的值设置为200或者204,OSS返回一个空文档和相应的状态码。 'OSSAccessKeyId': OSSAccessKeyId, 'policy': policyBase64, 'Signature': signature, 'Content-Type': contentType, } }).then((res) => { console.log(res); if (res[1].statusCode === 200) { return `${OSS_URL}/${ossPath}` } else { throw new Error(`uoload failed statusCode :${res[1].statusCode}`) } }); //'image/jpeg' } module.exports = { post: post, uploadFile: uploadFile, }