上传图片到七牛,token401?

目前采用的上传策略是:

前端先请求自己的node服务器拿到token,
然后调用七牛的接口https://upload-z2.qiniup.com上传图片。

整个流程刚开始是能跑通的,但是过段时间就会有token失效的情况,重启服务后才能继续使用。难道说是要自己写个方法去定时刷新token吗?

后台生成token的方法是用七牛的nodejs SDK生成的

const config = require('../config')

const qiniu = require('qiniu')
const accessKey = config.qiniu.AK;
const secretKey = config.qiniu.SK;
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);

//自定义凭证有效期(示例2小时,expires单位为秒,为上传凭证的有效时间)
const options = {
  scope: config.qiniu.bucket
};
const putPolicy = new qiniu.rs.PutPolicy(options);
const uploadToken = putPolicy.uploadToken(mac);

module.exports = uploadToken
阅读 3.9k
4 个回答

找到问题了,在写接口的时候把引入token的代码放到了外面,导致获取token的代码只执行了一次,移到接口里面就好了。被自己蠢哭了,谢谢大家的回答~

clipboard.png

再次更新:上面这样写也是有问题的,原因在于require有缓存的机制。。正确的做法是封装一个getUploadToken的方法,然后在接口里面调用

clipboard.png

nodeJS的没试过,集成过js的sdk。

的确是需要每次调用上传控件的时候,先获取token,然后才能传通。

你的这个401问题,就是token失效了。

uptoken你要是没有自己设定的话默认有效时间是3600s 超过时间自然就会失效 你可以使用七牛的uploadToken方法来设定有效时长
java方法如下 相信nodeJS也有一样的方法
/**

 * 生成上传token
 *
 * @param bucket  空间名
 * @param key     key,可为 null
 * @param expires 有效时长,单位秒。默认3600s
 * @param policy  上传策略的其它参数,如 new StringMap().put("endUser", "uid").putNotEmpty("returnBody", "")。
 *                scope通过 bucket、key间接设置,deadline 通过 expires 间接设置
 * @param strict  是否去除非限定的策略字段,默认true
 * @return 生成的上传token
 */
public String uploadToken(String bucket, String key, long expires, StringMap policy, boolean strict) {
    long deadline = System.currentTimeMillis() / 1000 + expires;
    return uploadTokenWithDeadline(bucket, key, deadline, policy, strict);
}

需要定时刷新,不过我在生产环境下都是一次上传生成一次,没出过毛病

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