持久化数据处理
发送数据处理请求
对于已经保存到七牛空间的文件,可以通过发送持久化的数据处理指令来进行处理,这些指令支持七牛官方提供的指令,也包括客户自己开发的自定义数据处理的指令。数据处理的结果还可以通过七牛主动通知的方式告知业务服务器。
使用数据处理,首先需要构建一个OperationManager
对象:
mac := qbox.NewMac(accessKey, secretKey)
cfg := storage.Config{
UseHTTPS: false,
}
// 指定空间所在的区域,如果不指定将自动探测
// 如果没有特殊需求,默认不需要指定
//cfg.Zone=&storage.ZoneHuabei
operationManager := storage.NewOperationManager(mac, &cfg)
进行视频的处理示例:
bucket := "if-pbl"
key := "qiniu.mp4"
mac := qbox.NewMac(accessKey, secretKey)
saveBucket := bucket
// 处理指令集合
fopAvthumb := fmt.Sprintf("avthumb/mp4/s/480x320/vb/500k|saveas/%s",
storage.EncodedEntry(saveBucket, "pfop_test_qiniu.mp4"))
fopVframe := fmt.Sprintf("vframe/jpg/offset/10|saveas/%s",
storage.EncodedEntry(saveBucket, "pfop_test_qiniu.jpg"))
fopVsample := fmt.Sprintf("vsample/jpg/interval/20/pattern/%s",
base64.URLEncoding.EncodeToString([]byte("pfop_test_$(count).jpg")))
fopBatch := []string{fopAvthumb, fopVframe, fopVsample}
fops := strings.Join(fopBatch, ";")
// 强制重新执行数据处理任务
force := true
// 数据处理指令全部完成之后,通知该地址
notifyURL := "http://api.example.com/pfop/callback"
// 数据处理的私有队列,必须指定以保障处理速度
pipeline := "jemy"
persistentId, err := operationManager.Pfop(bucket, key, fops, pipeline, notifyURL, force)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(persistentId)
查询数据处理请求状态
由于数据处理是异步处理,可以根据发送处理请求时返回的 persistentId
去查询任务的处理进度,如果在上传策略里面设置了persistentNotifyUrl
或者发送处理请求时指定notifyURL
的情况下,直接业务服务器等待处理结果通知即可,如果需要主动查询,可以采用如下代码中的:
persistentId := "z0.597f28b445a2650c994bb208"
ret, err := operationManager.Prefop(persistentId)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(ret.String())