美文网首页
七牛上传开发(三)使用NodeJS生成带数据处理的凭证

七牛上传开发(三)使用NodeJS生成带数据处理的凭证

作者: youthcity | 来源:发表于2018-07-25 00:05 被阅读96次

背景

业务需求,产品希望通过后台接口上传视频后,能立即获取视频切片的地址。然后将地址插入到相关业务的表中。
但是七牛的视频处理(切片、转码等)是异步执行,那么如何才能直接获取到经过七牛视频处理后的资源地址呢?

解决思路

在做七牛普通上传的 token时,我们可以提前设定上传后的文件名(key)。当前端向后端获取token时,一并将资源地址和token返回前端。前端利用 token进行文件直传到CDN,上传成功后,将已获得的资源地址进行相关业务处理(资源地址上报等)。

那么,可以不可以将类似的思路,复用到带数据处理的token生成中。
我们在生成token的时,将两种文件名(源资源文件名和经处理的资源名)信息保存到token中。前端在获取token时,提前获取到文件访问地址。

但是有一个问题,音视频处理是一个很耗时的操作,不像文件直传CDN进行保存,可以立即得到反馈。那么,如何确定视频处理成功呢?可以通过直传返回的persistentId,定期轮询「持久化处理状态查询接口」。来判断是否处理完毕。

步骤

Step1 生成带数据处理的凭证

const qiniu = require("qiniu");

const accessKey = 'XXXXX';
const secretKey = '私钥XXX';

const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);

const bucket = '存储空间名';
const origin_filename = 'prTEDwvJY18YBD_720_p1.mp4';
const save_as_filename = 'hls_prTEDwvJY18YBD_720_p1.m3u8';

const save_hls_entry = qiniu.util.urlsafeBase64Encode(`${bucket}:${save_as_filename}`);
const avthumbMp4Fop = `avthumb/m3u8/noDomain/1/segtime/15/vb/440k|saveas/${save_hls_entry}`;
const options = {
  scope: `${bucket}:${origin_filename}`,
  persistentOps: avthumbMp4Fop,
  persistentPipeline: 'video_pipeline',
};
var putPolicy = new qiniu.rs.PutPolicy(options);
console.log(putPolicy.uploadToken(mac));

Step2 前端使用token直传CDN

POST http://up.qiniu.com
格式: form-data
参数:
key: 文件名,上文代码中的 `origin_filename`
token: 上传token
file: 具体文件

// 上传成功的响应体
// 状态码 200
{
    "hash": "luVJbz9RtE3Ha7c9XaDerE6rPyvP",
    "key": "prTEDwvJY18YBD_720_p1.mp4",
    "persistentId": "z0.5b56c9b938b9f324a573edb4" // 可以使用persistentId,检测当前处理状态
}

Step3 轮询检测当前作业处理状态

GET api.qiniu.com/status/get/prefop?id=${persistentId}

{
    "code": 0, //   状态码0成功,1等待处理,2正在处理,3处理失败,4通知提交失败。
    "desc": "The fop was completed successfully",
    "id": "z0.5b56c9b938b9f324a573edb4",
    "inputBucket": "ocean",
    "inputKey": "prTEDwvJY18YBD_720_p1.mp4",
    "items": [
        {
            "cmd": "avthumb/m3u8/noDomain/1/segtime/15/vb/440k|saveas/b2NlYW46aGxzX3ByVEVEd3ZKWTE4WUJEXzcyMF9wMS5tM3U4",
            "code": 0,
            "desc": "The fop was completed successfully",
            "hash": "FraV6PX6Xp7mYYgAnY0sniTK-pPt",
            "key": "hls_prTEDwvJY18YBD_720_p1.m3u8",
            "returnOld": 0
        }
    ],
    "pipeline": "1381326751.k12_video",
    "reqid": "FQIAAKAxpZfFOkQV"
}

相关文章

参考资料

相关文章

网友评论

      本文标题:七牛上传开发(三)使用NodeJS生成带数据处理的凭证

      本文链接:https://www.haomeiwen.com/subject/ktrumftx.html