nodejs实现腾讯云签名算法?

这是文档里对算法的说明:

clipboard.png

Original是已知的字符串,我已经拼接好了,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我应该用哪个?SignTmp其实是Hmac类型的对象,也不能直接和origin相加,所以,求大神指导一波。。。

阅读 5k
1 个回答

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
腾讯云对象储存文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题