Node调用七牛云图片审核api鉴权简记
前言
国内涉及到UGC(用户生产内容)的服务,无论是图片、文字、视频甚至直播,都会涉及到内容审核,不然可能无法上线。最近在使用七牛云的图片审核api,大概流程是服务端(Node)调用七牛云图片审核api(文档地址),一直报错401"bad token"。
因为之前有项目使用过客户端直接上传到七牛云,服务端返回一个token给前端,前端上传时放在header.Authorization完成鉴权。token使用的是官方提供的sdk(文档地址)生成。
前端上传鉴权token
供前端上传使用的token代码大体长这样:
// 官方sdk
const qiniu = require('qiniu');
// 七牛云上传鉴权
const getUptoken = () => {
return new Promise((resolve, reject) => {
const options = {
scope: 'YOUR-BUCKET-NAME', //空间名称
};
const qiniuMac = new qiniu.auth.digest.Mac('YOUR-AK', 'YOUR-SK');
const putPolicy = new qiniu.rs.PutPolicy(options);
const uptoken = putPolicy.uploadToken(qiniuMac);
if (uptoken) {
resolve(uptoken);
} else {
reject('获取upToken失败')
}
})
}
用上面的token调用'http://ai.qiniuapi.com/v3/image/censor'会报401 “bad token”,推测可能是因为上面生成的token仅供客户端上传使用。经过翻阅sdk源码(源码地址),发现在/examples/atlab_check_qiniu_auth.js示例中调用了如下方法:
var accessToken = qiniu.util.generateAccessTokenV2(mac, reqURL, 'POST', contentType, reqBody);
服务端管理鉴权token
于是照着放进自己的代码中,竟然通过了鉴权,调用成功了。整理了一下图片审核完整的代码,大体长这样:
// 官方sdk
const qiniu = require('qiniu');
const request = require('./request');
// 七牛云管理鉴权
const getQiniuAccessToken = (url, body) => {
return qiniu.util.generateAccessTokenV2(qiniuMac, url, 'POST', 'application/json', body);
}
// 图片审核
const imageLegalCheck = (base64 = '') => {
const url = 'http://ai.qiniuapi.com/v3/image/censor';
const data = JSON.stringify({
data: {
uri: base64
},
params: {
scenes: ["pulp", 'terror'],
}
});
const accessToken = getQiniuAccessToken(url, data);
return request({
url,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': accessToken,
},
data,
}).then((res) => {
if (res.result) {
return res.result.suggestion === 'pass'
} else {
return false;
}
}).catch((err) => {
return err;
});
}
根据官方文档,data.uri支持base64和url两种方式。params.scenes支持pulp(黄)、terror(恐)、politician(政)、ads(广告)、behavior(不良场景)5种场景,可以单独设置,也可以以string[]格式组合。每种类型单独计费,大概8.5元/万张/类型,具体见官方收费说明。
结尾
此外,还有一些小细节需要注意,否则可能也会调不通。比如如果你使用base64格式,官方要求加上前缀“data:application/octet-stream;base64”;Content-Type需要设置为application/json;request方法根据你项目情况自己封装,我试过用axios和request都能调通,但如果使用async-request这种可能需要修改包源码才能支持。
至此,基于Node服务端直调七牛云图片审核api流程打通。
热门文章
- 微信小程序“拍照识图”上线(63,759)
- YouTube评论翻译插件《油管评论翻译机》上线了(60,292)
- 基金助手--chrome浏览器插件(45,194)
- 拍照识别彩票结果在线工具(31,944)
- vue+tabs动态组件方案漫谈(26,477)
- 《油管评论翻译机》使用说明书(25,341)
- 网页打印插件Print.js(23,978)
- 自用YouTube抓取评论+翻译工具(23,382)
- YouTube评论导出免费在线工具(18,055)
- px转rem/vw方法小结(17,566)