玩转飞书项目插件开发之五---与腾讯云存储进行数据交互

252 阅读2分钟

前面我们介绍了与Jira系统是如何交互的,我们可能还会碰到一种场景,会定会拉取工作项的数据,进行数据汇总,上传至云存储中,那么接下来以腾讯云存储为例,介绍如何实现这一操作。

腾讯云存储

这里默认相关操作者都已经具备腾讯云存储的相关知识,并能够熟练进行操作

代码实例

废话不多说,直接上代码,代码实现的是从飞书项目中拉取缺陷工作项,并将缺陷工作项的缺陷名称采集,并上传至云存储中。

获取飞书项目SDK Client

func getCli() *sdkv3.Client {
   tr := &http.Transport{
      TLSClientConfig: &tls.Config{
         InsecureSkipVerify: true,
      },
   }
   client := &http.Client{Transport: tr}
   cli := sdkv3.NewClient("MII_xxxxx", "xxxxx",
      sdkv3.WithOpenBaseUrl("https://project.feishu.cn"),
      sdkv3.WithAccessTokenType(corev3.AccessTokenTypePlugin),
      sdkv3.WithHttpClient(client))
   return cli
}

实际操作时需要将上述代码中的appkey和secret替换为实际的appkey和secret。

获取指定空间的缺陷数据

func queryWorkItemDetail(ctx context.Context, projectKey string, workItemTypeKey string,
   workItemIDs []int64, filterFields []string, expand *workitem.Expand, userKey string) (Data []*workitem.WorkItemInfo, err error) {
   log.Println("start to query work item detail")
   cli := getCli()
   if expand == nil {
      expand = &workitem.Expand{}
   }
   req := workitem.NewQueryWorkItemDetailReqBuilder().ProjectKey(projectKey).WorkItemTypeKey(workItemTypeKey).WorkItemIDs(workItemIDs).Fields(filterFields).
      Expand(expand).Build()
   resp, err := cli.WorkItem.QueryWorkItemDetail(ctx, req, core.WithUserKey(userKey))
   if err != nil {
      log.Println("QueryWorkItem detail failed, err: ", err.Error())
      return nil, err
   }
   if !resp.Success() {
      msg := fmt.Sprintf("QueryWorkItemDetail failed,api err=%s,resp.Error())
      log.Printf("QueryWorkItemDetail failed,api err=%s", resp.Error())
      return nil, errors.New(msg)
   }
   log.Printf("QueryWorkItemDetail success,len=%d", len(resp.Data))
   return resp.Data, nil
}

我们实际的缺陷数据如下

image.png

上传数据

func main() {
   u, _ := url.Parse("https://xxxxxxx.myqcloud.com")
   b := &cos.BaseURL{BucketURL: u}
   c := cos.NewClient(b, &http.Client{
      Transport: &cos.AuthorizationTransport{
         SecretID:  os.Getenv("xxxxx"),
         SecretKey: os.Getenv("xxxxx"),
      },
   })
   name := "issue_detail.txt"
   var issueNames string
   // 1. 获取缺陷列表
   issues, _ := queryWorkItemDetail(context.Background(), "67283830b49caa303bfcb58e", "issue",
      []int64{4982464530}, nil, nil, "user_key")
   for _, issue := range issues {
      issueNames += issue.Name + "\n"
   }
   f := strings.NewReader(issueNames)
   _, err := c.Object.Put(context.Background(), name, f, nil)
   if err != nil {
      panic(err)
   }
}

需要将腾讯云存储的信息更新为实际的信息,调用queryWorkItemDetail时需要传入实际的用户user_key信息

经过上述的操作可以去云存储上查看实际上传的文件

image.png

issue_detail.txt的详细信息

image.png

至此,我们已经可以将缺陷信息上传至腾讯云存储了~