在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/云計算  HTML/ nodejs實現(xiàn)騰訊云簽名算法?

nodejs實現(xiàn)騰訊云簽名算法?

這是文檔里對算法的說明:

clipboard.png

Original是已知的字符串,我已經(jīng)拼接好了,SignTmp我也能得到:

let now = (+new Date() / 1000).toFixed(0)
let origin = `a=[appid]&b=[bucket]&k=[SecretID]&e=[${now + 86400}]&t=[${now}]&r=[${getRandomNumber()}]&f=`
let hmac = crypto.createHmac('sha1', SecretKey)
let SignTmp = hmac.update(origin)

但是最后一步,文檔中說的Bse64(append(SignTmp, Original))是直接把SignTmp + Original么?如果是,我看nodejs的文檔里,有一個hmac.digest()方法,那這個時候hmac我應(yīng)該用哪個?SignTmp其實是Hmac類型的對象,也不能直接和origin相加,所以,求大神指導一波。。。

回答
編輯回答
氕氘氚

SDK大法好

參考這個鏈接:鏈接描述

我的代碼:

    import fs from 'fs'
    import koaMulter from 'koa-multer'
    import COS from 'cos-nodejs-sdk-v5'
    import variants from './../../config/var'
    
    let cos = new COS({
        SecretId: variants.secretId,
        SecretKey: variants.secretKey
    })
    let storage = koaMulter.diskStorage({
        destination (req, file, callback) {
            callback(null, 'tmp/')
        },
        filename (req, file, callback) {
            let fileOriginName = file.originalname.split('.')
            let len = fileOriginName.length
    
            callback(null, `${fileOriginName.slice(0, len - 1)}-${+new Date()}.${fileOriginName.splice(len - 1, len)}`)
        }
    })
    const multer = new koaMulter({ storage })
    
    router
        .post('upload_img/', multer.single('image'), async (ctx) => { // 上傳圖片
            const { 
                file
            } = ctx.req
            const params = {
                SecretId: variants.secretId,
                SecretKey: variants.secretKey,
                Bucket: variants.Bucket,
                Region: variants.Region,
                Key: `./${file.filename}`,
                FilePath: file.path
            }
    
            function pushImgToQCloud () {
                return new Promise((resolve, reject) => {
                    cos.sliceUploadFile(params, function (err, data) {
                        if (err) {
                            return reject(err)
                        } else {
                            return resolve(data)
                        }
                    })
                })
            }
    
            try {
                let res = await pushImgToQCloud()
    
                ctx.body = resProcessor({
                    type: 'success',
                    data: `http://${variants.uploadImgHost}/${res.Key}`
                })
            } catch (err) {
                ctx.body = resProcessor({
                    type: 'custom',
                    code: 101,
                    msg: '圖片上傳失敗',
                    data: JSON.stringify(err)
                })
            }
        })

更多配置可以參考騰訊云sdk的文檔:
demo
騰訊云對象儲存文檔

2017年7月29日 18:52