持久化数据处理

发送数据处理请求

对于已经保存到七牛空间的文件,可以通过发送持久化的数据处理指令来进行处理,这些指令支持七牛官方提供的指令,也包括客户自己开发的自定义数据处理的指令。数据处理的结果还可以通过七牛主动通知的方式告知业务服务器。

使用数据处理,首先需要构建一个OperationManager对象:

  1. mac := qbox.NewMac(accessKey, secretKey)
  2. cfg := storage.Config{
  3. UseHTTPS: false,
  4. }
  5. // 指定空间所在的区域,如果不指定将自动探测
  6. // 如果没有特殊需求,默认不需要指定
  7. //cfg.Zone=&storage.ZoneHuabei
  8. operationManager := storage.NewOperationManager(mac, &cfg)

进行视频的处理示例:

  1. bucket := "if-pbl"
  2. key := "qiniu.mp4"
  3. mac := qbox.NewMac(accessKey, secretKey)
  4. saveBucket := bucket
  5. // 处理指令集合
  6. fopAvthumb := fmt.Sprintf("avthumb/mp4/s/480x320/vb/500k|saveas/%s",
  7. storage.EncodedEntry(saveBucket, "pfop_test_qiniu.mp4"))
  8. fopVframe := fmt.Sprintf("vframe/jpg/offset/10|saveas/%s",
  9. storage.EncodedEntry(saveBucket, "pfop_test_qiniu.jpg"))
  10. fopVsample := fmt.Sprintf("vsample/jpg/interval/20/pattern/%s",
  11. base64.URLEncoding.EncodeToString([]byte("pfop_test_$(count).jpg")))
  12. fopBatch := []string{fopAvthumb, fopVframe, fopVsample}
  13. fops := strings.Join(fopBatch, ";")
  14. // 强制重新执行数据处理任务
  15. force := true
  16. // 数据处理指令全部完成之后,通知该地址
  17. notifyURL := "http://api.example.com/pfop/callback"
  18. // 数据处理的私有队列,必须指定以保障处理速度
  19. pipeline := "jemy"
  20. persistentId, err := operationManager.Pfop(bucket, key, fops, pipeline, notifyURL, force)
  21. if err != nil {
  22. fmt.Println(err)
  23. return
  24. }
  25. fmt.Println(persistentId)

查询数据处理请求状态

由于数据处理是异步处理,可以根据发送处理请求时返回的 persistentId 去查询任务的处理进度,如果在上传策略里面设置了persistentNotifyUrl或者发送处理请求时指定notifyURL的情况下,直接业务服务器等待处理结果通知即可,如果需要主动查询,可以采用如下代码中的:

  1. persistentId := "z0.597f28b445a2650c994bb208"
  2. ret, err := operationManager.Prefop(persistentId)
  3. if err != nil {
  4. fmt.Println(err)
  5. return
  6. }
  7. fmt.Println(ret.String())