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 }