# 复制文件

将用户云空间中的文件复制至其它文件夹下。该接口为异步接口。

## 使用限制
- 不支持复制文件夹。
-   云空间中文件夹（包括根文件夹，即根目录）的单层节点上限为 1500 个。超过此限制时，接口将返回 1062507 错误码。可通过将文件复制到不同文件夹中解决。
- 云空间中所有层级的节点总和的上限为 40 万个。
- 该接口不支持并发调用，且调用频率上限为 5QPS 且 10000次/天。否则会返回 1061045 错误码，可通过稍后重试解决。

## 请求

基本 | &nbsp;
---|---
HTTP URL | https://open.feishu.cn/open-apis/drive/v1/files/:file_token/copy
HTTP Method | POST
接口频率限制 | [特殊频控](https://open.feishu.cn/document/ukTMukTMukTM/uUzN04SN3QjL1cDN)
支持的应用类型 | Custom App、Store App
权限要求<br>**调用该 API 所需的权限。开启其中任意一项权限即可调用**<br>开启任一权限即可 | 复制云文档(docs:document:copy)<br>查看、评论、编辑和管理云空间中所有文件(drive:drive)
字段权限要求 | **注意事项**：该接口返回体中存在下列敏感字段，仅当开启对应的权限后才会返回；如果无需获取这些字段，则不建议申请<br>获取用户 user ID(contact:user.employee_id:readonly)

### 请求头

名称 | 类型 | 必填 | 描述
---|---|---|---
Authorization | string | 是 | `tenant_access_token`<br>或<br>`user_access_token`<br>**值格式**："Bearer `access_token`"<br>**示例值**："Bearer u-7f1bcd13fc57d46bac21793a18e560"<br>[了解更多：如何选择与获取 access token](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-choose-which-type-of-token-to-use)
Content-Type | string | 是 | **固定值**："application/json; charset=utf-8"

### 路径参数

名称 | 类型 | 描述
---|---|---
file_token | string | 被复制的源文件的 token。了解如何获取文件 token，参考[文件概述](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/file-overview)。<br>**示例值**："doccngpahSdXrFPIBD4XdIabcef"

### 查询参数

名称 | 类型 | 必填 | 描述
---|---|---|---
user_id_type | string | 否 | 用户 ID 类型<br>**示例值**：open_id<br>**可选值有**：<br>- open_id：标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。[了解更多：如何获取 Open ID](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-openid)<br>- union_id：标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的，在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID，应用开发商可以把同个用户在多个应用中的身份关联起来。[了解更多：如何获取 Union ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-union-id)<br>- user_id：标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内，一个用户的 User ID 在所有应用（包括商店应用）中都保持一致。User ID 主要用于在不同的应用间打通用户数据。[了解更多：如何获取 User ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-user-id)<br>**默认值**：`open_id`<br>**当值为 `user_id`，字段权限要求**：<br>获取用户 user ID(contact:user.employee_id:readonly)

### 请求体

名称 | 类型 | 必填 | 描述
---|---|---|---
name | string | 是 | 复制的新文件的名称<br>**数据校验规则**：最大长度为 `256` 字节<br>**示例值**："Demo copy"
type | string | 否 | 被复制的源文件的类型。必须与 `file_token` 对应的源文件实际类型一致。<br>**注意**：该参数为必填，请忽略左侧必填列的“否”。若该参数值为空或与实际文件类型不匹配，接口将返回失败。<br>**示例值**："docx"<br>**可选值有**：<br>- file：文件类型<br>- doc：旧版文档。了解更多，参考[新旧版本文档说明](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/docs/upgraded-docs-access-guide/upgraded-docs-openapi-access-guide)。<br>- sheet：电子表格类型<br>- bitable：多维表格类型<br>- docx：新版文档类型<br>- mindnote：思维笔记类型<br>- slides：幻灯片类型
folder_token | string | 是 | 目标文件夹的 token。若传入根文件夹 token，表示复制的新文件将被创建在云空间根目录。了解如何获取文件夹 token，参考[文件夹概述](https://open.feishu.cn/document/ukTMukTMukTM/ugTNzUjL4UzM14CO1MTN/folder-overview)。<br>**示例值**："fldbcO1UuPz8VwnpPx5a92abcef"
extra | property\[\] | 否 | 自定义请求附加参数，用于实现特殊的复制语义
key | string | 是 | 自定义属性键对象<br>**示例值**："target_type"
value | string | 是 | 自定义属性值对象<br>**示例值**："docx"

### 请求体示例
```json
{
    "name": "Demo copy",
    "type": "file",
    "folder_token": "fldbcO1UuPz8VwnpPx5a92abcef"
}
```

## 响应

### 响应体

名称 | 类型 | 描述
---|---|---
code | int | 错误码，非 0 表示失败
msg | string | 错误描述
data | \- | \-
file | file | 复制的新文件信息
token | string | 复制的新文件 token
name | string | 新文件的名称
type | string | 新文件的类型
parent_token | string | 新文件的父文件夹 token
url | string | 文件在浏览器中的 URL 链接
shortcut_info | shortcut_info | 快捷方式文件信息（该参数不会返回）
target_type | string | 快捷方式指向的源文件类型
target_token | string | 快捷方式指向的源文件 token
created_time | string | 文件创建时间（该参数不会返回）
modified_time | string | 文件最近修改时间（该参数不会返回）
owner_id | string | 文件所有者（该参数不会返回）

### 响应体示例
```json
{
    "code": 0,
    "data": {
        "file": {
            "name": "Demo copy",
            "parent_token": "fldcnBh8LrnX42dr1pBYclabcef",
            "token": "doxcnUkUOWtOelpFcha2Z9abcef",
            "type": "docx",
            "url": "https://feishu.cn/docx/doxcnUkUOWtOelpFcha2Zabcef"
        }
    },
    "msg": "success"
}
```

### 错误码

HTTP状态码 | 错误码 | 描述 | 排查建议
---|---|---|---
500 | 1061001 | internal error. | 服务内部错误，包括超时，错误码没处理。请联系[技术支持](https://applink.larkoffice.com/TLJpeNdW)。
400 | 1061002 | params error. | 资源不存在。请确认对应资源是否存在。
404 | 1061003 | not found. | 请确认对应资源是否存在。
403 | 1061004 | forbidden. | 当前调用身份没有文件或文件夹的阅读或编辑等权限。请参考以下方式解决：<br>- 若上传素材，请确保当前调用身份具有目标云文档的编辑权限<br>- 若上传文件，请确保当前调用身份具有文件夹的编辑权限<br>- 若对文件或文件夹进行增删改等操作，请确保调用身份具有足够文档权限：<br>- 对于新建文件接口，调用身份需要有目标文件夹的编辑权限<br>- 对于复制文件接口，调用身份需要有文件的阅读或编辑权限、并且具有目标文件夹的编辑权限<br>- 对于移动文件接口，调用身份需要有被移动文件的可管理权限、被移动文件所在位置的编辑权限、目标位置的编辑权限<br>- 对于删除文件接口，调用身份需要具有以下两种权限之一：<br>- 该应用或用户是文件所有者并且具有该文件所在父文件夹的编辑权限<br>- 该应用或用户并非文件所有者，但是该文件所在父文件夹的所有者或者拥有该父文件夹的所有权限（full access）<br>了解开通权限步骤，参考[如何为应用开通云文档相关资源的权限](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-add-permissions-to-app)。
401 | 1061005 | auth failed. | 请检查 access token 是否有效，使用正确身份访问该接口。
404 | 1061007 | file has been delete. | 文件已被删除。请确认对应节点未被删除。
400 | 1061045 | can retry. | 内部可重试错误，请稍后重试。
400 | 1062507 | parent node out of sibling num. | 云空间中文件夹（包括根文件夹，即根目录）的单层节点超限。上限为 1500 个，你可通过将文件新建到不同文件夹中解决。参考以下方式获取文件夹 token：<br>- 调用[获取我的空间（root folder）元数据](https://open.feishu.cn/document/ukTMukTMukTM/ugTNzUjL4UzM14CO1MTN/get-root-folder-meta)接口获取根目录（即根文件夹）的 token<br>- 继续调用[获取文件夹中的文件清单](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/drive-v1/file/list)接口，获取根目录下文件夹的 token
403 | 1064510 | cross tenant and unit not support. | 不支持跨租户跨地域的请求。
403 | 1064511 | cross brand not support. | 不支持跨品牌的请求。

