Skip to content

素材管理 - 租户权限(FeishuTenantV1DriveMedia)

接口名称

素材管理(租户权限) -(IFeishuTenantV1DriveMedia

功能描述

提供以租户身份管理飞书云文档素材的能力。素材指在文档、电子表格、多维表格等中用到的资源素材,如文档中的图片、视频或文件等,每个素材都有唯一的 token 作为标识。支持素材的上传(包括完整上传和分片上传)、下载和获取临时下载链接。适用于需要以应用身份管理云文档素材的业务场景,如自动化文档生成、批量素材处理等。

参考文档

函数列表

函数名称功能描述认证方式HTTP 方法
UploadAllMediaAsync上传素材(完整上传)租户令牌POST
UploadPrepareMediaAsync预上传(分片上传初始化)租户令牌POST
UploadPartMediaAsync上传分片租户令牌POST
UploadFinishMediaAsync完成分片上传租户令牌POST
DownloadFileAsync下载素材租户令牌GET
BatchGetTmpDownloadUrlAsync获取素材临时下载链接租户令牌GET

函数详细内容

上传素材(完整上传)

函数签名

csharp
Task<FeishuApiResult<FilesUploadAllResult>?> UploadAllMediaAsync(
    [FormContent] MediasUploadAllRequest mediasUploadAllRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌

参数

参数名类型必填说明
mediasUploadAllRequestMediasUploadAllRequest上传素材请求体
├─ FileNamestring素材名称,最大 250 字符
├─ ParentTypestring上传点类型,如 docx_imagesheet_file
├─ ParentNodestring上传点 token(目标云文档 token)
├─ Sizeint文件大小(字节),最大 20971520(20MB)
├─ Checksumstring?Adler-32 校验和
├─ Extrastring?额外参数,JSON 格式
├─ FilePathstring?本地文件绝对路径

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "file_token": "boxcnxxxxxxxx",
    "name": "demo.jpeg",
    "size": 1024000,
    "url": "https://example.feishu.cn/drive/media/xxx"
  }
}

说明:将文件、图片、视频等素材上传到指定云文档中。素材大小不得超过 20 MB,超过请使用分片上传。调用频率上限为 5 QPS,10000 次/天。


预上传(分片上传初始化)

函数签名

csharp
Task<FeishuApiResult<FilesUploadPrepareResult>?> UploadPrepareMediaAsync(
    [Body] MediasUploadPrepareRequest mediasUploadPrepareRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌

参数

参数名类型必填说明
mediasUploadPrepareRequestMediasUploadPrepareRequest预上传请求体
├─ FileNamestring素材名称
├─ ParentTypestring上传点类型
├─ ParentNodestring上传点 token
├─ Sizeint文件大小(字节)

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "upload_id": "upload_xxxxxxxx",
    "block_size": 4194304,
    "block_num": 3
  }
}

说明:发送初始化请求获取上传事务 ID 和分片策略。平台固定以 4MB 大小对素材进行分片。上传事务 ID 在 24 小时内有效。


上传分片

函数签名

csharp
Task<FeishuNullDataApiResult?> UploadPartMediaAsync(
    [FormContent] FilesUploadPartRequest filesUploadPartRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌

参数

参数名类型必填说明
filesUploadPartRequestFilesUploadPartRequest上传分片请求体
├─ UploadIdstring上传事务 ID
├─ Seqint分片序号,从 0 开始
├─ FilePathstring?分片文件路径

响应

json
{
  "code": 0,
  "msg": "success"
}

说明:根据预上传接口返回的上传事务 ID 和分片策略上传对应的文件分片。


完成分片上传

函数签名

csharp
Task<FeishuApiResult<FilesUploadFinishResult>?> UploadFinishMediaAsync(
    [Body] FilesUploadFinishRequest filesUploadPartRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌

参数

参数名类型必填说明
filesUploadPartRequestFilesUploadFinishRequest完成上传请求体
├─ UploadIdstring上传事务 ID

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "file_token": "boxcnxxxxxxxx",
    "name": "demo.jpeg",
    "size": 15728640
  }
}

说明:将分片全部上传完毕后,需调用本接口触发完成上传。否则将上传失败。


下载素材

函数签名

csharp
Task<byte[]?> DownloadFileAsync(
    [Path] string file_token,
    [Query("extra")] string extra,
    [Header("Range")] string? range = null,
    CancellationToken cancellationToken = default);

认证:租户令牌

参数

参数名类型必填说明
file_tokenstring文件 token
extrastring额外参数,用于多维表格鉴权
rangestring?分片下载范围,如 bytes=0-1024

响应:文件二进制数据

说明:下载各类云文档中的素材,例如电子表格中的图片。支持通过 Range 参数分片下载。


获取素材临时下载链接

函数签名

csharp
Task<FeishuApiResult<BatchGetTmpDownloadUrlResult>?> BatchGetTmpDownloadUrlAsync(
    [Query("file_tokens")] string file_token,
    [Query("extra")] string extra,
    CancellationToken cancellationToken = default);

认证:租户令牌

参数

参数名类型必填说明
file_tokenstring文件 token
extrastring额外参数,用于多维表格鉴权

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "tmp_download_urls": [
      {
        "file_token": "boxcnxxxxxxxx",
        "tmp_download_url": "https://example.feishu.cn/download/xxx",
        "expire_time": "2024-01-21T14:22:00"
      }
    ]
  }
}

说明:获取云文档中素材的临时下载链接,链接有效期为 24 小时。调用前需确保应用拥有素材的下载权限。


代码示例

csharp
// 使用租户权限管理素材
public class MediaManagementService
{
    private readonly IFeishuTenantV1DriveMedia _mediaClient;

    public MediaManagementService(IFeishuTenantV1DriveMedia mediaClient)
    {
        _mediaClient = mediaClient;
    }

    public async Task UploadImageToDocumentAsync(string documentToken, string imagePath)
    {
        // 上传图片到文档
        var request = new MediasUploadAllRequest
        {
            FileName = Path.GetFileName(imagePath),
            ParentType = "docx_image",
            ParentNode = documentToken,
            Size = (int)new FileInfo(imagePath).Length,
            FilePath = imagePath
        };

        var result = await _mediaClient.UploadAllMediaAsync(request);
        if (result?.Data != null)
        {
            Console.WriteLine($"图片上传成功,Token: {result.Data.FileToken}");
        }
    }

    public async Task<string> GetMediaDownloadUrlAsync(string fileToken)
    {
        // 获取临时下载链接
        var result = await _mediaClient.BatchGetTmpDownloadUrlAsync(fileToken, extra: "{}");
        if (result?.Data?.TmpDownloadUrls?.FirstOrDefault() is {} urlInfo)
        {
            return urlInfo.TmpDownloadUrl;
        }
        return string.Empty;
    }
}