gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/drive/v1/api.go (about)

     1  // Package drive code generated by oapi sdk gen
     2  /*
     3   * MIT License
     4   *
     5   * Copyright (c) 2022 Lark Technologies Pte. Ltd.
     6   *
     7   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
     8   *
     9   * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software.
    10   *
    11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    12   */
    13  
    14  package larkdrive
    15  
    16  import (
    17  	"bytes"
    18  	"context"
    19  	"net/http"
    20  
    21  	"gitee.com/larksuite/oapi-sdk-go/v3/core"
    22  )
    23  
    24  func NewService(config *larkcore.Config) *DriveService {
    25  	d := &DriveService{config: config}
    26  	d.ExportTask = &exportTask{service: d}
    27  	d.File = &file{service: d}
    28  	d.FileComment = &fileComment{service: d}
    29  	d.FileCommentReply = &fileCommentReply{service: d}
    30  	d.FileStatistics = &fileStatistics{service: d}
    31  	d.FileSubscription = &fileSubscription{service: d}
    32  	d.ImportTask = &importTask{service: d}
    33  	d.Media = &media{service: d}
    34  	d.Meta = &meta{service: d}
    35  	d.PermissionMember = &permissionMember{service: d}
    36  	d.PermissionPublic = &permissionPublic{service: d}
    37  	return d
    38  }
    39  
    40  type DriveService struct {
    41  	config           *larkcore.Config
    42  	ExportTask       *exportTask       // 导出
    43  	File             *file             // 分片上传
    44  	FileComment      *fileComment      // 评论
    45  	FileCommentReply *fileCommentReply // 评论
    46  	FileStatistics   *fileStatistics   // file.statistics
    47  	FileSubscription *fileSubscription // 订阅
    48  	ImportTask       *importTask       // 导入
    49  	Media            *media            // 分片上传
    50  	Meta             *meta             // meta
    51  	PermissionMember *permissionMember // 成员
    52  	PermissionPublic *permissionPublic // 设置
    53  }
    54  
    55  type exportTask struct {
    56  	service *DriveService
    57  }
    58  type file struct {
    59  	service *DriveService
    60  }
    61  type fileComment struct {
    62  	service *DriveService
    63  }
    64  type fileCommentReply struct {
    65  	service *DriveService
    66  }
    67  type fileStatistics struct {
    68  	service *DriveService
    69  }
    70  type fileSubscription struct {
    71  	service *DriveService
    72  }
    73  type importTask struct {
    74  	service *DriveService
    75  }
    76  type media struct {
    77  	service *DriveService
    78  }
    79  type meta struct {
    80  	service *DriveService
    81  }
    82  type permissionMember struct {
    83  	service *DriveService
    84  }
    85  type permissionPublic struct {
    86  	service *DriveService
    87  }
    88  
    89  // 创建导出任务
    90  //
    91  // - 创建导出任务,将云文档导出为文件
    92  //
    93  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/export_task/create
    94  //
    95  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/create_exportTask.go
    96  func (e *exportTask) Create(ctx context.Context, req *CreateExportTaskReq, options ...larkcore.RequestOptionFunc) (*CreateExportTaskResp, error) {
    97  	// 发起请求
    98  	apiReq := req.apiReq
    99  	apiReq.ApiPath = "/open-apis/drive/v1/export_tasks"
   100  	apiReq.HttpMethod = http.MethodPost
   101  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   102  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   103  	if err != nil {
   104  		return nil, err
   105  	}
   106  	// 反序列响应结果
   107  	resp := &CreateExportTaskResp{ApiResp: apiResp}
   108  	err = apiResp.JSONUnmarshalBody(resp)
   109  	if err != nil {
   110  		return nil, err
   111  	}
   112  	return resp, err
   113  }
   114  
   115  // 下载导出文件
   116  //
   117  // - 根据任务导出结果的token,下载导出文件
   118  //
   119  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/export_task/download
   120  //
   121  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/download_exportTask.go
   122  func (e *exportTask) Download(ctx context.Context, req *DownloadExportTaskReq, options ...larkcore.RequestOptionFunc) (*DownloadExportTaskResp, error) {
   123  	// 发起请求
   124  	apiReq := req.apiReq
   125  	apiReq.ApiPath = "/open-apis/drive/v1/export_tasks/file/:file_token/download"
   126  	apiReq.HttpMethod = http.MethodGet
   127  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   128  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   129  	if err != nil {
   130  		return nil, err
   131  	}
   132  	// 反序列响应结果
   133  	resp := &DownloadExportTaskResp{ApiResp: apiResp}
   134  	// 如果是下载,则设置响应结果
   135  	if apiResp.StatusCode == http.StatusOK {
   136  		resp.File = bytes.NewBuffer(apiResp.RawBody)
   137  		resp.FileName = larkcore.FileNameByHeader(apiResp.Header)
   138  		return resp, err
   139  	}
   140  	err = apiResp.JSONUnmarshalBody(resp)
   141  	if err != nil {
   142  		return nil, err
   143  	}
   144  	return resp, err
   145  }
   146  
   147  // 查询导出任务结果
   148  //
   149  // - 根据创建导出任务的ticket查询导出任务的结果
   150  //
   151  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/export_task/get
   152  //
   153  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/get_exportTask.go
   154  func (e *exportTask) Get(ctx context.Context, req *GetExportTaskReq, options ...larkcore.RequestOptionFunc) (*GetExportTaskResp, error) {
   155  	// 发起请求
   156  	apiReq := req.apiReq
   157  	apiReq.ApiPath = "/open-apis/drive/v1/export_tasks/:ticket"
   158  	apiReq.HttpMethod = http.MethodGet
   159  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   160  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   161  	if err != nil {
   162  		return nil, err
   163  	}
   164  	// 反序列响应结果
   165  	resp := &GetExportTaskResp{ApiResp: apiResp}
   166  	err = apiResp.JSONUnmarshalBody(resp)
   167  	if err != nil {
   168  		return nil, err
   169  	}
   170  	return resp, err
   171  }
   172  
   173  // 复制文件
   174  //
   175  // - 将文件复制到用户云空间的其他文件夹中。不支持复制文件夹。;;如果目标文件夹是我的空间,则复制的文件会在「**我的空间**」的「**归我所有**」列表里。
   176  //
   177  // - 该接口不支持并发拷贝多个文件,且调用频率上限为 5QPS 且 10000次/天
   178  //
   179  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/copy
   180  //
   181  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/copy_file.go
   182  func (f *file) Copy(ctx context.Context, req *CopyFileReq, options ...larkcore.RequestOptionFunc) (*CopyFileResp, error) {
   183  	// 发起请求
   184  	apiReq := req.apiReq
   185  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/copy"
   186  	apiReq.HttpMethod = http.MethodPost
   187  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   188  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   189  	if err != nil {
   190  		return nil, err
   191  	}
   192  	// 反序列响应结果
   193  	resp := &CopyFileResp{ApiResp: apiResp}
   194  	err = apiResp.JSONUnmarshalBody(resp)
   195  	if err != nil {
   196  		return nil, err
   197  	}
   198  	return resp, err
   199  }
   200  
   201  // 新建文件夹
   202  //
   203  // - 在用户云空间的指定文件夹中创建一个新的空文件夹。
   204  //
   205  // - 该接口不支持并发创建,且调用频率上限为 5QPS 以及 10000次/天
   206  //
   207  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/create_folder
   208  //
   209  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/createFolder_file.go
   210  func (f *file) CreateFolder(ctx context.Context, req *CreateFolderFileReq, options ...larkcore.RequestOptionFunc) (*CreateFolderFileResp, error) {
   211  	// 发起请求
   212  	apiReq := req.apiReq
   213  	apiReq.ApiPath = "/open-apis/drive/v1/files/create_folder"
   214  	apiReq.HttpMethod = http.MethodPost
   215  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   216  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   217  	if err != nil {
   218  		return nil, err
   219  	}
   220  	// 反序列响应结果
   221  	resp := &CreateFolderFileResp{ApiResp: apiResp}
   222  	err = apiResp.JSONUnmarshalBody(resp)
   223  	if err != nil {
   224  		return nil, err
   225  	}
   226  	return resp, err
   227  }
   228  
   229  // 删除文件
   230  //
   231  // - 删除用户在云空间内的文件或者文件夹。文件或者文件夹被删除后,会进入用户回收站里。
   232  //
   233  // - 要删除文件需要确保应用具有下述两种权限之一:;1. 该应用是文件所有者并且具有该文件所在父文件夹的编辑权限。;2. 该应用并非文件所有者,但是是该文件所在父文件夹的所有者或者拥有该父文件夹的所有权限(full access)。
   234  //
   235  // - 该接口不支持并发调用,且调用频率上限为5QPS。删除文件夹会异步执行并返回一个task_id,可以使用[task_check](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/task_check)接口查询任务执行状态。
   236  //
   237  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/delete
   238  //
   239  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/delete_file.go
   240  func (f *file) Delete(ctx context.Context, req *DeleteFileReq, options ...larkcore.RequestOptionFunc) (*DeleteFileResp, error) {
   241  	// 发起请求
   242  	apiReq := req.apiReq
   243  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token"
   244  	apiReq.HttpMethod = http.MethodDelete
   245  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   246  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   247  	if err != nil {
   248  		return nil, err
   249  	}
   250  	// 反序列响应结果
   251  	resp := &DeleteFileResp{ApiResp: apiResp}
   252  	err = apiResp.JSONUnmarshalBody(resp)
   253  	if err != nil {
   254  		return nil, err
   255  	}
   256  	return resp, err
   257  }
   258  
   259  // 下载文件
   260  //
   261  // - 使用该接口可以下载在云空间目录下的文件(不含飞书文档/表格/思维导图等在线文档)。支持range下载。
   262  //
   263  // - 该接口支持调用频率上限为5QPS
   264  //
   265  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/download
   266  //
   267  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/download_file.go
   268  func (f *file) Download(ctx context.Context, req *DownloadFileReq, options ...larkcore.RequestOptionFunc) (*DownloadFileResp, error) {
   269  	// 发起请求
   270  	apiReq := req.apiReq
   271  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/download"
   272  	apiReq.HttpMethod = http.MethodGet
   273  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   274  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   275  	if err != nil {
   276  		return nil, err
   277  	}
   278  	// 反序列响应结果
   279  	resp := &DownloadFileResp{ApiResp: apiResp}
   280  	// 如果是下载,则设置响应结果
   281  	if apiResp.StatusCode == http.StatusOK {
   282  		resp.File = bytes.NewBuffer(apiResp.RawBody)
   283  		resp.FileName = larkcore.FileNameByHeader(apiResp.Header)
   284  		return resp, err
   285  	}
   286  	err = apiResp.JSONUnmarshalBody(resp)
   287  	if err != nil {
   288  		return nil, err
   289  	}
   290  	return resp, err
   291  }
   292  
   293  // 获取文件夹下的清单
   294  //
   295  // - 获取用户云空间中指定文件夹下的文件清单。清单类型包括文件、各种在线文档(文档、电子表格、多维表格、思维笔记)、文件夹和快捷方式。该接口支持分页,但是不会递归的获取子文件夹的清单。
   296  //
   297  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/list
   298  //
   299  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/list_file.go
   300  func (f *file) List(ctx context.Context, req *ListFileReq, options ...larkcore.RequestOptionFunc) (*ListFileResp, error) {
   301  	// 发起请求
   302  	apiReq := req.apiReq
   303  	apiReq.ApiPath = "/open-apis/drive/v1/files"
   304  	apiReq.HttpMethod = http.MethodGet
   305  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   306  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   307  	if err != nil {
   308  		return nil, err
   309  	}
   310  	// 反序列响应结果
   311  	resp := &ListFileResp{ApiResp: apiResp}
   312  	err = apiResp.JSONUnmarshalBody(resp)
   313  	if err != nil {
   314  		return nil, err
   315  	}
   316  	return resp, err
   317  }
   318  
   319  // 移动文件
   320  //
   321  // - 将文件或者文件夹移动到用户云空间的其他位置。
   322  //
   323  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/move
   324  //
   325  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/move_file.go
   326  func (f *file) Move(ctx context.Context, req *MoveFileReq, options ...larkcore.RequestOptionFunc) (*MoveFileResp, error) {
   327  	// 发起请求
   328  	apiReq := req.apiReq
   329  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/move"
   330  	apiReq.HttpMethod = http.MethodPost
   331  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   332  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   333  	if err != nil {
   334  		return nil, err
   335  	}
   336  	// 反序列响应结果
   337  	resp := &MoveFileResp{ApiResp: apiResp}
   338  	err = apiResp.JSONUnmarshalBody(resp)
   339  	if err != nil {
   340  		return nil, err
   341  	}
   342  	return resp, err
   343  }
   344  
   345  // 订阅云文档事件
   346  //
   347  // - 该接口仅支持**文档拥有者**订阅自己文档的通知事件,可订阅的文档类型为**旧版文档**、**新版文档**、**电子表格**和**多维表格**。在调用该接口之前请确保正确[配置事件回调网址和订阅事件类型](/ssl:ttdoc/ukTMukTMukTM/uUTNz4SN1MjL1UzM#2eb3504a),事件类型参考[事件列表](/ssl:ttdoc/ukTMukTMukTM/uYDNxYjL2QTM24iN0EjN/event-list)。
   348  //
   349  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/subscribe
   350  //
   351  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/subscribe_file.go
   352  func (f *file) Subscribe(ctx context.Context, req *SubscribeFileReq, options ...larkcore.RequestOptionFunc) (*SubscribeFileResp, error) {
   353  	// 发起请求
   354  	apiReq := req.apiReq
   355  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/subscribe"
   356  	apiReq.HttpMethod = http.MethodPost
   357  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   358  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   359  	if err != nil {
   360  		return nil, err
   361  	}
   362  	// 反序列响应结果
   363  	resp := &SubscribeFileResp{ApiResp: apiResp}
   364  	err = apiResp.JSONUnmarshalBody(resp)
   365  	if err != nil {
   366  		return nil, err
   367  	}
   368  	return resp, err
   369  }
   370  
   371  // 查询异步任务状态
   372  //
   373  // - 查询删除文件夹等异步任务的状态信息。
   374  //
   375  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/task_check
   376  //
   377  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/taskCheck_file.go
   378  func (f *file) TaskCheck(ctx context.Context, req *TaskCheckFileReq, options ...larkcore.RequestOptionFunc) (*TaskCheckFileResp, error) {
   379  	// 发起请求
   380  	apiReq := req.apiReq
   381  	apiReq.ApiPath = "/open-apis/drive/v1/files/task_check"
   382  	apiReq.HttpMethod = http.MethodGet
   383  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   384  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   385  	if err != nil {
   386  		return nil, err
   387  	}
   388  	// 反序列响应结果
   389  	resp := &TaskCheckFileResp{ApiResp: apiResp}
   390  	err = apiResp.JSONUnmarshalBody(resp)
   391  	if err != nil {
   392  		return nil, err
   393  	}
   394  	return resp, err
   395  }
   396  
   397  // 上传文件
   398  //
   399  // - 向云空间指定目录下上传一个小文件。
   400  //
   401  // - 请不要使用这个接口上传大于20MB的文件,如果有这个需求可以尝试使用[分片上传接口](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/multipart-upload-file-/introduction)。
   402  //
   403  // - 该接口支持调用频率上限为5QPS
   404  //
   405  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/upload_all
   406  //
   407  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadAll_file.go
   408  func (f *file) UploadAll(ctx context.Context, req *UploadAllFileReq, options ...larkcore.RequestOptionFunc) (*UploadAllFileResp, error) {
   409  	options = append(options, larkcore.WithFileUpload())
   410  	// 发起请求
   411  	apiReq := req.apiReq
   412  	apiReq.ApiPath = "/open-apis/drive/v1/files/upload_all"
   413  	apiReq.HttpMethod = http.MethodPost
   414  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   415  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   416  	if err != nil {
   417  		return nil, err
   418  	}
   419  	// 反序列响应结果
   420  	resp := &UploadAllFileResp{ApiResp: apiResp}
   421  	err = apiResp.JSONUnmarshalBody(resp)
   422  	if err != nil {
   423  		return nil, err
   424  	}
   425  	return resp, err
   426  }
   427  
   428  // 分片上传文件(完成上传)
   429  //
   430  // - 触发完成上传。
   431  //
   432  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   433  //
   434  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/upload_finish
   435  //
   436  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadFinish_file.go
   437  func (f *file) UploadFinish(ctx context.Context, req *UploadFinishFileReq, options ...larkcore.RequestOptionFunc) (*UploadFinishFileResp, error) {
   438  	// 发起请求
   439  	apiReq := req.apiReq
   440  	apiReq.ApiPath = "/open-apis/drive/v1/files/upload_finish"
   441  	apiReq.HttpMethod = http.MethodPost
   442  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   443  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   444  	if err != nil {
   445  		return nil, err
   446  	}
   447  	// 反序列响应结果
   448  	resp := &UploadFinishFileResp{ApiResp: apiResp}
   449  	err = apiResp.JSONUnmarshalBody(resp)
   450  	if err != nil {
   451  		return nil, err
   452  	}
   453  	return resp, err
   454  }
   455  
   456  // 分片上传文件(上传分片)
   457  //
   458  // - 上传对应的文件块。
   459  //
   460  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   461  //
   462  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/upload_part
   463  //
   464  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadPart_file.go
   465  func (f *file) UploadPart(ctx context.Context, req *UploadPartFileReq, options ...larkcore.RequestOptionFunc) (*UploadPartFileResp, error) {
   466  	options = append(options, larkcore.WithFileUpload())
   467  	// 发起请求
   468  	apiReq := req.apiReq
   469  	apiReq.ApiPath = "/open-apis/drive/v1/files/upload_part"
   470  	apiReq.HttpMethod = http.MethodPost
   471  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   472  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   473  	if err != nil {
   474  		return nil, err
   475  	}
   476  	// 反序列响应结果
   477  	resp := &UploadPartFileResp{ApiResp: apiResp}
   478  	err = apiResp.JSONUnmarshalBody(resp)
   479  	if err != nil {
   480  		return nil, err
   481  	}
   482  	return resp, err
   483  }
   484  
   485  // 分片上传文件(预上传)
   486  //
   487  // - 发送初始化请求获取上传事务ID和分块策略,目前是以4MB大小进行定长分片。
   488  //
   489  // - 你在24小时内可保存上传事务ID和上传进度,以便可以恢复上传
   490  //
   491  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   492  //
   493  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/upload_prepare
   494  //
   495  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadPrepare_file.go
   496  func (f *file) UploadPrepare(ctx context.Context, req *UploadPrepareFileReq, options ...larkcore.RequestOptionFunc) (*UploadPrepareFileResp, error) {
   497  	// 发起请求
   498  	apiReq := req.apiReq
   499  	apiReq.ApiPath = "/open-apis/drive/v1/files/upload_prepare"
   500  	apiReq.HttpMethod = http.MethodPost
   501  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   502  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   503  	if err != nil {
   504  		return nil, err
   505  	}
   506  	// 反序列响应结果
   507  	resp := &UploadPrepareFileResp{ApiResp: apiResp}
   508  	err = apiResp.JSONUnmarshalBody(resp)
   509  	if err != nil {
   510  		return nil, err
   511  	}
   512  	return resp, err
   513  }
   514  
   515  // 添加评论
   516  //
   517  // - 往云文档添加一条全局评论。
   518  //
   519  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-comment/create
   520  //
   521  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/create_fileComment.go
   522  func (f *fileComment) Create(ctx context.Context, req *CreateFileCommentReq, options ...larkcore.RequestOptionFunc) (*CreateFileCommentResp, error) {
   523  	// 发起请求
   524  	apiReq := req.apiReq
   525  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/comments"
   526  	apiReq.HttpMethod = http.MethodPost
   527  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   528  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   529  	if err != nil {
   530  		return nil, err
   531  	}
   532  	// 反序列响应结果
   533  	resp := &CreateFileCommentResp{ApiResp: apiResp}
   534  	err = apiResp.JSONUnmarshalBody(resp)
   535  	if err != nil {
   536  		return nil, err
   537  	}
   538  	return resp, err
   539  }
   540  
   541  // 获取评论
   542  //
   543  // - 获取云文档中的某条评论。
   544  //
   545  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-comment/get
   546  //
   547  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/get_fileComment.go
   548  func (f *fileComment) Get(ctx context.Context, req *GetFileCommentReq, options ...larkcore.RequestOptionFunc) (*GetFileCommentResp, error) {
   549  	// 发起请求
   550  	apiReq := req.apiReq
   551  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/comments/:comment_id"
   552  	apiReq.HttpMethod = http.MethodGet
   553  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   554  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   555  	if err != nil {
   556  		return nil, err
   557  	}
   558  	// 反序列响应结果
   559  	resp := &GetFileCommentResp{ApiResp: apiResp}
   560  	err = apiResp.JSONUnmarshalBody(resp)
   561  	if err != nil {
   562  		return nil, err
   563  	}
   564  	return resp, err
   565  }
   566  
   567  // 获取评论列表
   568  //
   569  // - 通过分页方式获取云文档中的全文评论列表。
   570  //
   571  // - 注意:该接口仅可获取在线文档的全文评论,不支持获取局部评论或者在线表格中的评论。
   572  //
   573  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-comment/list
   574  //
   575  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/list_fileComment.go
   576  func (f *fileComment) List(ctx context.Context, req *ListFileCommentReq, options ...larkcore.RequestOptionFunc) (*ListFileCommentResp, error) {
   577  	// 发起请求
   578  	apiReq := req.apiReq
   579  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/comments"
   580  	apiReq.HttpMethod = http.MethodGet
   581  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   582  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   583  	if err != nil {
   584  		return nil, err
   585  	}
   586  	// 反序列响应结果
   587  	resp := &ListFileCommentResp{ApiResp: apiResp}
   588  	err = apiResp.JSONUnmarshalBody(resp)
   589  	if err != nil {
   590  		return nil, err
   591  	}
   592  	return resp, err
   593  }
   594  func (f *fileComment) ListByIterator(ctx context.Context, req *ListFileCommentReq, options ...larkcore.RequestOptionFunc) (*ListFileCommentIterator, error) {
   595  	return &ListFileCommentIterator{
   596  		ctx:      ctx,
   597  		req:      req,
   598  		listFunc: f.List,
   599  		options:  options,
   600  		limit:    req.Limit}, nil
   601  }
   602  
   603  // 解决/恢复 评论
   604  //
   605  // - 解决或恢复云文档中的评论。
   606  //
   607  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-comment/patch
   608  //
   609  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/patch_fileComment.go
   610  func (f *fileComment) Patch(ctx context.Context, req *PatchFileCommentReq, options ...larkcore.RequestOptionFunc) (*PatchFileCommentResp, error) {
   611  	// 发起请求
   612  	apiReq := req.apiReq
   613  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/comments/:comment_id"
   614  	apiReq.HttpMethod = http.MethodPatch
   615  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   616  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   617  	if err != nil {
   618  		return nil, err
   619  	}
   620  	// 反序列响应结果
   621  	resp := &PatchFileCommentResp{ApiResp: apiResp}
   622  	err = apiResp.JSONUnmarshalBody(resp)
   623  	if err != nil {
   624  		return nil, err
   625  	}
   626  	return resp, err
   627  }
   628  
   629  // 删除回复
   630  //
   631  // - 删除云文档中的某条回复。
   632  //
   633  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-comment-reply/delete
   634  //
   635  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/delete_fileCommentReply.go
   636  func (f *fileCommentReply) Delete(ctx context.Context, req *DeleteFileCommentReplyReq, options ...larkcore.RequestOptionFunc) (*DeleteFileCommentReplyResp, error) {
   637  	// 发起请求
   638  	apiReq := req.apiReq
   639  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/comments/:comment_id/replies/:reply_id"
   640  	apiReq.HttpMethod = http.MethodDelete
   641  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   642  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   643  	if err != nil {
   644  		return nil, err
   645  	}
   646  	// 反序列响应结果
   647  	resp := &DeleteFileCommentReplyResp{ApiResp: apiResp}
   648  	err = apiResp.JSONUnmarshalBody(resp)
   649  	if err != nil {
   650  		return nil, err
   651  	}
   652  	return resp, err
   653  }
   654  
   655  // 更新回复
   656  //
   657  // - 更新云文档中的某条回复。
   658  //
   659  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-comment-reply/update
   660  //
   661  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/update_fileCommentReply.go
   662  func (f *fileCommentReply) Update(ctx context.Context, req *UpdateFileCommentReplyReq, options ...larkcore.RequestOptionFunc) (*UpdateFileCommentReplyResp, error) {
   663  	// 发起请求
   664  	apiReq := req.apiReq
   665  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/comments/:comment_id/replies/:reply_id"
   666  	apiReq.HttpMethod = http.MethodPut
   667  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   668  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   669  	if err != nil {
   670  		return nil, err
   671  	}
   672  	// 反序列响应结果
   673  	resp := &UpdateFileCommentReplyResp{ApiResp: apiResp}
   674  	err = apiResp.JSONUnmarshalBody(resp)
   675  	if err != nil {
   676  		return nil, err
   677  	}
   678  	return resp, err
   679  }
   680  
   681  // 获取文件统计信息
   682  //
   683  // - 此接口用于获取文件统计信息,包括文档阅读人数、次数和点赞数。
   684  //
   685  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-statistics/get
   686  //
   687  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/get_fileStatistics.go
   688  func (f *fileStatistics) Get(ctx context.Context, req *GetFileStatisticsReq, options ...larkcore.RequestOptionFunc) (*GetFileStatisticsResp, error) {
   689  	// 发起请求
   690  	apiReq := req.apiReq
   691  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/statistics"
   692  	apiReq.HttpMethod = http.MethodGet
   693  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   694  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   695  	if err != nil {
   696  		return nil, err
   697  	}
   698  	// 反序列响应结果
   699  	resp := &GetFileStatisticsResp{ApiResp: apiResp}
   700  	err = apiResp.JSONUnmarshalBody(resp)
   701  	if err != nil {
   702  		return nil, err
   703  	}
   704  	return resp, err
   705  }
   706  
   707  // 创建订阅
   708  //
   709  // - 订阅文档中的变更事件,当前支持文档评论订阅,订阅后文档评论更新会有“云文档助手”推送给订阅的用户
   710  //
   711  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-subscription/create
   712  //
   713  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/create_fileSubscription.go
   714  func (f *fileSubscription) Create(ctx context.Context, req *CreateFileSubscriptionReq, options ...larkcore.RequestOptionFunc) (*CreateFileSubscriptionResp, error) {
   715  	// 发起请求
   716  	apiReq := req.apiReq
   717  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/subscriptions"
   718  	apiReq.HttpMethod = http.MethodPost
   719  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser}
   720  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   721  	if err != nil {
   722  		return nil, err
   723  	}
   724  	// 反序列响应结果
   725  	resp := &CreateFileSubscriptionResp{ApiResp: apiResp}
   726  	err = apiResp.JSONUnmarshalBody(resp)
   727  	if err != nil {
   728  		return nil, err
   729  	}
   730  	return resp, err
   731  }
   732  
   733  // 获取订阅状态
   734  //
   735  // - 根据订阅ID获取该订阅的状态
   736  //
   737  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-subscription/get
   738  //
   739  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/get_fileSubscription.go
   740  func (f *fileSubscription) Get(ctx context.Context, req *GetFileSubscriptionReq, options ...larkcore.RequestOptionFunc) (*GetFileSubscriptionResp, error) {
   741  	// 发起请求
   742  	apiReq := req.apiReq
   743  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/subscriptions/:subscription_id"
   744  	apiReq.HttpMethod = http.MethodGet
   745  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser}
   746  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   747  	if err != nil {
   748  		return nil, err
   749  	}
   750  	// 反序列响应结果
   751  	resp := &GetFileSubscriptionResp{ApiResp: apiResp}
   752  	err = apiResp.JSONUnmarshalBody(resp)
   753  	if err != nil {
   754  		return nil, err
   755  	}
   756  	return resp, err
   757  }
   758  
   759  // 更新订阅状态
   760  //
   761  // - 根据订阅ID更新订阅状态
   762  //
   763  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file-subscription/patch
   764  //
   765  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/patch_fileSubscription.go
   766  func (f *fileSubscription) Patch(ctx context.Context, req *PatchFileSubscriptionReq, options ...larkcore.RequestOptionFunc) (*PatchFileSubscriptionResp, error) {
   767  	// 发起请求
   768  	apiReq := req.apiReq
   769  	apiReq.ApiPath = "/open-apis/drive/v1/files/:file_token/subscriptions/:subscription_id"
   770  	apiReq.HttpMethod = http.MethodPatch
   771  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser}
   772  	apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...)
   773  	if err != nil {
   774  		return nil, err
   775  	}
   776  	// 反序列响应结果
   777  	resp := &PatchFileSubscriptionResp{ApiResp: apiResp}
   778  	err = apiResp.JSONUnmarshalBody(resp)
   779  	if err != nil {
   780  		return nil, err
   781  	}
   782  	return resp, err
   783  }
   784  
   785  // 创建导入任务
   786  //
   787  // - 创建导入任务。支持导入为 doc、docx、sheet、bitable,参考[导入用户指南](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/import_task/import-user-guide)
   788  //
   789  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/import_task/create
   790  //
   791  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/create_importTask.go
   792  func (i *importTask) Create(ctx context.Context, req *CreateImportTaskReq, options ...larkcore.RequestOptionFunc) (*CreateImportTaskResp, error) {
   793  	// 发起请求
   794  	apiReq := req.apiReq
   795  	apiReq.ApiPath = "/open-apis/drive/v1/import_tasks"
   796  	apiReq.HttpMethod = http.MethodPost
   797  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   798  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   799  	if err != nil {
   800  		return nil, err
   801  	}
   802  	// 反序列响应结果
   803  	resp := &CreateImportTaskResp{ApiResp: apiResp}
   804  	err = apiResp.JSONUnmarshalBody(resp)
   805  	if err != nil {
   806  		return nil, err
   807  	}
   808  	return resp, err
   809  }
   810  
   811  // 查询导入结果
   812  //
   813  // - 根据创建导入任务返回的 ticket 查询导入结果。
   814  //
   815  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/import_task/get
   816  //
   817  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/get_importTask.go
   818  func (i *importTask) Get(ctx context.Context, req *GetImportTaskReq, options ...larkcore.RequestOptionFunc) (*GetImportTaskResp, error) {
   819  	// 发起请求
   820  	apiReq := req.apiReq
   821  	apiReq.ApiPath = "/open-apis/drive/v1/import_tasks/:ticket"
   822  	apiReq.HttpMethod = http.MethodGet
   823  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   824  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   825  	if err != nil {
   826  		return nil, err
   827  	}
   828  	// 反序列响应结果
   829  	resp := &GetImportTaskResp{ApiResp: apiResp}
   830  	err = apiResp.JSONUnmarshalBody(resp)
   831  	if err != nil {
   832  		return nil, err
   833  	}
   834  	return resp, err
   835  }
   836  
   837  // 获取素材临时下载链接
   838  //
   839  // - 通过file_token获取素材临时下载链接,链接时效性是24小时,过期失效。
   840  //
   841  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   842  //
   843  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/batch_get_tmp_download_url
   844  //
   845  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/batchGetTmpDownloadUrl_media.go
   846  func (m *media) BatchGetTmpDownloadUrl(ctx context.Context, req *BatchGetTmpDownloadUrlMediaReq, options ...larkcore.RequestOptionFunc) (*BatchGetTmpDownloadUrlMediaResp, error) {
   847  	// 发起请求
   848  	apiReq := req.apiReq
   849  	apiReq.ApiPath = "/open-apis/drive/v1/medias/batch_get_tmp_download_url"
   850  	apiReq.HttpMethod = http.MethodGet
   851  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   852  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
   853  	if err != nil {
   854  		return nil, err
   855  	}
   856  	// 反序列响应结果
   857  	resp := &BatchGetTmpDownloadUrlMediaResp{ApiResp: apiResp}
   858  	err = apiResp.JSONUnmarshalBody(resp)
   859  	if err != nil {
   860  		return nil, err
   861  	}
   862  	return resp, err
   863  }
   864  
   865  // 下载素材
   866  //
   867  // - 使用该接口可以下载素材。素材表示在各种创作容器里的文件,如Doc文档内的图片,文件均属于素材。支持range下载。
   868  //
   869  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   870  //
   871  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/download
   872  //
   873  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/download_media.go
   874  func (m *media) Download(ctx context.Context, req *DownloadMediaReq, options ...larkcore.RequestOptionFunc) (*DownloadMediaResp, error) {
   875  	// 发起请求
   876  	apiReq := req.apiReq
   877  	apiReq.ApiPath = "/open-apis/drive/v1/medias/:file_token/download"
   878  	apiReq.HttpMethod = http.MethodGet
   879  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   880  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
   881  	if err != nil {
   882  		return nil, err
   883  	}
   884  	// 反序列响应结果
   885  	resp := &DownloadMediaResp{ApiResp: apiResp}
   886  	// 如果是下载,则设置响应结果
   887  	if apiResp.StatusCode == http.StatusOK {
   888  		resp.File = bytes.NewBuffer(apiResp.RawBody)
   889  		resp.FileName = larkcore.FileNameByHeader(apiResp.Header)
   890  		return resp, err
   891  	}
   892  	err = apiResp.JSONUnmarshalBody(resp)
   893  	if err != nil {
   894  		return nil, err
   895  	}
   896  	return resp, err
   897  }
   898  
   899  // 上传素材
   900  //
   901  // - 将文件、图片、视频等素材文件上传到指定云文档中。素材文件在云空间中不会显示,只会显示在对应云文档中。
   902  //
   903  // - 请不要使用这个接口上传大于20MB的文件,如果有这个需求可以尝试使用[分片上传接口](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/multipart-upload-media/introduction)。
   904  //
   905  // - 该接口支持调用频率上限为5QPS
   906  //
   907  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/upload_all
   908  //
   909  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadAll_media.go
   910  func (m *media) UploadAll(ctx context.Context, req *UploadAllMediaReq, options ...larkcore.RequestOptionFunc) (*UploadAllMediaResp, error) {
   911  	options = append(options, larkcore.WithFileUpload())
   912  	// 发起请求
   913  	apiReq := req.apiReq
   914  	apiReq.ApiPath = "/open-apis/drive/v1/medias/upload_all"
   915  	apiReq.HttpMethod = http.MethodPost
   916  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   917  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
   918  	if err != nil {
   919  		return nil, err
   920  	}
   921  	// 反序列响应结果
   922  	resp := &UploadAllMediaResp{ApiResp: apiResp}
   923  	err = apiResp.JSONUnmarshalBody(resp)
   924  	if err != nil {
   925  		return nil, err
   926  	}
   927  	return resp, err
   928  }
   929  
   930  // 分片上传素材(完成上传)
   931  //
   932  // - 触发完成上传。
   933  //
   934  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   935  //
   936  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/upload_finish
   937  //
   938  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadFinish_media.go
   939  func (m *media) UploadFinish(ctx context.Context, req *UploadFinishMediaReq, options ...larkcore.RequestOptionFunc) (*UploadFinishMediaResp, error) {
   940  	// 发起请求
   941  	apiReq := req.apiReq
   942  	apiReq.ApiPath = "/open-apis/drive/v1/medias/upload_finish"
   943  	apiReq.HttpMethod = http.MethodPost
   944  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   945  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
   946  	if err != nil {
   947  		return nil, err
   948  	}
   949  	// 反序列响应结果
   950  	resp := &UploadFinishMediaResp{ApiResp: apiResp}
   951  	err = apiResp.JSONUnmarshalBody(resp)
   952  	if err != nil {
   953  		return nil, err
   954  	}
   955  	return resp, err
   956  }
   957  
   958  // 分片上传素材(上传分片)
   959  //
   960  // - 上传对应的文件块。
   961  //
   962  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   963  //
   964  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/upload_part
   965  //
   966  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadPart_media.go
   967  func (m *media) UploadPart(ctx context.Context, req *UploadPartMediaReq, options ...larkcore.RequestOptionFunc) (*UploadPartMediaResp, error) {
   968  	options = append(options, larkcore.WithFileUpload())
   969  	// 发起请求
   970  	apiReq := req.apiReq
   971  	apiReq.ApiPath = "/open-apis/drive/v1/medias/upload_part"
   972  	apiReq.HttpMethod = http.MethodPost
   973  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
   974  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
   975  	if err != nil {
   976  		return nil, err
   977  	}
   978  	// 反序列响应结果
   979  	resp := &UploadPartMediaResp{ApiResp: apiResp}
   980  	err = apiResp.JSONUnmarshalBody(resp)
   981  	if err != nil {
   982  		return nil, err
   983  	}
   984  	return resp, err
   985  }
   986  
   987  // 分片上传素材(预上传)
   988  //
   989  // - 发送初始化请求获取上传事务ID和分块策略,目前是以4MB大小进行定长分片。
   990  //
   991  // - 您在24小时内可保存上传事务ID和上传进度,以便可以恢复上传
   992  //
   993  // - 该接口不支持太高的并发,且调用频率上限为5QPS
   994  //
   995  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/media/upload_prepare
   996  //
   997  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/uploadPrepare_media.go
   998  func (m *media) UploadPrepare(ctx context.Context, req *UploadPrepareMediaReq, options ...larkcore.RequestOptionFunc) (*UploadPrepareMediaResp, error) {
   999  	// 发起请求
  1000  	apiReq := req.apiReq
  1001  	apiReq.ApiPath = "/open-apis/drive/v1/medias/upload_prepare"
  1002  	apiReq.HttpMethod = http.MethodPost
  1003  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant}
  1004  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
  1005  	if err != nil {
  1006  		return nil, err
  1007  	}
  1008  	// 反序列响应结果
  1009  	resp := &UploadPrepareMediaResp{ApiResp: apiResp}
  1010  	err = apiResp.JSONUnmarshalBody(resp)
  1011  	if err != nil {
  1012  		return nil, err
  1013  	}
  1014  	return resp, err
  1015  }
  1016  
  1017  // 获取文档元数据
  1018  //
  1019  // - 该接口用于根据 token 获取各类文件的元数据
  1020  //
  1021  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/meta/batch_query
  1022  //
  1023  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/batchQuery_meta.go
  1024  func (m *meta) BatchQuery(ctx context.Context, req *BatchQueryMetaReq, options ...larkcore.RequestOptionFunc) (*BatchQueryMetaResp, error) {
  1025  	// 发起请求
  1026  	apiReq := req.apiReq
  1027  	apiReq.ApiPath = "/open-apis/drive/v1/metas/batch_query"
  1028  	apiReq.HttpMethod = http.MethodPost
  1029  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1030  	apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...)
  1031  	if err != nil {
  1032  		return nil, err
  1033  	}
  1034  	// 反序列响应结果
  1035  	resp := &BatchQueryMetaResp{ApiResp: apiResp}
  1036  	err = apiResp.JSONUnmarshalBody(resp)
  1037  	if err != nil {
  1038  		return nil, err
  1039  	}
  1040  	return resp, err
  1041  }
  1042  
  1043  // 增加协作者权限
  1044  //
  1045  // - 该接口用于根据 filetoken 给用户增加文档的权限。
  1046  //
  1047  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/permission-member/create
  1048  //
  1049  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/create_permissionMember.go
  1050  func (p *permissionMember) Create(ctx context.Context, req *CreatePermissionMemberReq, options ...larkcore.RequestOptionFunc) (*CreatePermissionMemberResp, error) {
  1051  	// 发起请求
  1052  	apiReq := req.apiReq
  1053  	apiReq.ApiPath = "/open-apis/drive/v1/permissions/:token/members"
  1054  	apiReq.HttpMethod = http.MethodPost
  1055  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1056  	apiResp, err := larkcore.Request(ctx, apiReq, p.service.config, options...)
  1057  	if err != nil {
  1058  		return nil, err
  1059  	}
  1060  	// 反序列响应结果
  1061  	resp := &CreatePermissionMemberResp{ApiResp: apiResp}
  1062  	err = apiResp.JSONUnmarshalBody(resp)
  1063  	if err != nil {
  1064  		return nil, err
  1065  	}
  1066  	return resp, err
  1067  }
  1068  
  1069  // 移除协作者权限
  1070  //
  1071  // - 该接口用于根据 filetoken 移除文档协作者的权限。
  1072  //
  1073  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/permission-member/delete
  1074  //
  1075  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/delete_permissionMember.go
  1076  func (p *permissionMember) Delete(ctx context.Context, req *DeletePermissionMemberReq, options ...larkcore.RequestOptionFunc) (*DeletePermissionMemberResp, error) {
  1077  	// 发起请求
  1078  	apiReq := req.apiReq
  1079  	apiReq.ApiPath = "/open-apis/drive/v1/permissions/:token/members/:member_id"
  1080  	apiReq.HttpMethod = http.MethodDelete
  1081  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1082  	apiResp, err := larkcore.Request(ctx, apiReq, p.service.config, options...)
  1083  	if err != nil {
  1084  		return nil, err
  1085  	}
  1086  	// 反序列响应结果
  1087  	resp := &DeletePermissionMemberResp{ApiResp: apiResp}
  1088  	err = apiResp.JSONUnmarshalBody(resp)
  1089  	if err != nil {
  1090  		return nil, err
  1091  	}
  1092  	return resp, err
  1093  }
  1094  
  1095  // 更新协作者权限
  1096  //
  1097  // - 该接口用于根据 filetoken 更新文档协作者的权限。
  1098  //
  1099  // - 该接口要求文档协作者已存在,如还未对文档协作者授权请先调用[「增加权限」 ](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/permission-member/create)接口进行授权。
  1100  //
  1101  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/permission-member/update
  1102  //
  1103  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/update_permissionMember.go
  1104  func (p *permissionMember) Update(ctx context.Context, req *UpdatePermissionMemberReq, options ...larkcore.RequestOptionFunc) (*UpdatePermissionMemberResp, error) {
  1105  	// 发起请求
  1106  	apiReq := req.apiReq
  1107  	apiReq.ApiPath = "/open-apis/drive/v1/permissions/:token/members/:member_id"
  1108  	apiReq.HttpMethod = http.MethodPut
  1109  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1110  	apiResp, err := larkcore.Request(ctx, apiReq, p.service.config, options...)
  1111  	if err != nil {
  1112  		return nil, err
  1113  	}
  1114  	// 反序列响应结果
  1115  	resp := &UpdatePermissionMemberResp{ApiResp: apiResp}
  1116  	err = apiResp.JSONUnmarshalBody(resp)
  1117  	if err != nil {
  1118  		return nil, err
  1119  	}
  1120  	return resp, err
  1121  }
  1122  
  1123  // 获取云文档权限设置
  1124  //
  1125  // - 该接口用于根据 filetoken 获取云文档的权限设置。
  1126  //
  1127  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/permission-public/get
  1128  //
  1129  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/get_permissionPublic.go
  1130  func (p *permissionPublic) Get(ctx context.Context, req *GetPermissionPublicReq, options ...larkcore.RequestOptionFunc) (*GetPermissionPublicResp, error) {
  1131  	// 发起请求
  1132  	apiReq := req.apiReq
  1133  	apiReq.ApiPath = "/open-apis/drive/v1/permissions/:token/public"
  1134  	apiReq.HttpMethod = http.MethodGet
  1135  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1136  	apiResp, err := larkcore.Request(ctx, apiReq, p.service.config, options...)
  1137  	if err != nil {
  1138  		return nil, err
  1139  	}
  1140  	// 反序列响应结果
  1141  	resp := &GetPermissionPublicResp{ApiResp: apiResp}
  1142  	err = apiResp.JSONUnmarshalBody(resp)
  1143  	if err != nil {
  1144  		return nil, err
  1145  	}
  1146  	return resp, err
  1147  }
  1148  
  1149  // 更新云文档权限设置
  1150  //
  1151  // - 该接口用于根据 filetoken 更新云文档的权限设置。
  1152  //
  1153  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/permission-public/patch
  1154  //
  1155  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/drivev1/patch_permissionPublic.go
  1156  func (p *permissionPublic) Patch(ctx context.Context, req *PatchPermissionPublicReq, options ...larkcore.RequestOptionFunc) (*PatchPermissionPublicResp, error) {
  1157  	// 发起请求
  1158  	apiReq := req.apiReq
  1159  	apiReq.ApiPath = "/open-apis/drive/v1/permissions/:token/public"
  1160  	apiReq.HttpMethod = http.MethodPatch
  1161  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1162  	apiResp, err := larkcore.Request(ctx, apiReq, p.service.config, options...)
  1163  	if err != nil {
  1164  		return nil, err
  1165  	}
  1166  	// 反序列响应结果
  1167  	resp := &PatchPermissionPublicResp{ApiResp: apiResp}
  1168  	err = apiResp.JSONUnmarshalBody(resp)
  1169  	if err != nil {
  1170  		return nil, err
  1171  	}
  1172  	return resp, err
  1173  }