
# 上传文件并关联工作项 - CreateIpdProjectIssueAttachment
#### 功能介绍
需要给IPD项目下的工作项上传附件时，可调用此接口。用户可以通过项目ID和工作项ID，传入需要关联的文件，给该工作项关联附件。
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-projectman/projectman_api_1002.html)。
#### 授权信息
账号根用户具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备如下身份策略权限，更多的权限说明请参见[权限和授权项](https://support.huaweicloud.com/api-projectman/projectman_03_Permission.html)。
| 授权项                           | 访问级别  | 资源类型（\*为必须） | 条件键                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 别名 | 依赖的授权项 |
|:---|:---|:---|:---|:---|:---|
| codeartsreq:attachment:upload | Write | -           | - codeartsreq:Model   - codeartsreq:ProjectId    | -  | -      |
   
#### URI
POST /v1/ipdprojectservice/projects/{project_id}/issues/{issue_id}/attachments/upload
表1路径参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| project_id | 是    | String | **参数解释**： 项目32位ID，项目唯一标识。通过[查询IPD项目列表](https://support.huaweicloud.com/api-projectman/ShowIpdProjectList.html)获取，响应消息体中的**id**字段的值就是项目ID。 **约束限制**： 不涉及。 **取值范围**： 32个字符，由英文字母和数字组成。 **默认取值**： 不涉及。                                                                               |
| issue_id   | 是    | String | **参数解释**： 工作项唯一ID。可以通过[查询工作项列表](https://support.huaweicloud.com/api-projectman/ListIpdProjectIssues.html)或者[查询树状工作项](https://support.huaweicloud.com/api-projectman/ShowIpdIssueTree.html)接口获取，响应消息体中的**id**字段的值就是工作项ID。 **约束限制**： 不涉及。 **取值范围**： 18\~19个字符的数字字符串。 **默认取值**： 不涉及。 |
   
#### 请求参数
表2FormData参数 
| 参数         | 是否必选 | 参数类型 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| attachment | 是    | File | **参数解释**： 附件。 **约束限制**： 不涉及。 **取值范围**： 不涉及。 **默认取值**： 不涉及。 |
   
#### 响应参数
**状态码：200**
表3响应Body参数 
| 参数      | 参数类型                                                                                           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|
| status  | String                                                                                         | **参数解释**： 返回状态。 **取值范围**： - success：响应成功   - error：响应失败    |
| message | String                                                                                         | **参数解释**： 失败信息。 **取值范围**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| result  | Array of [AttachmentVoExt] objects | **参数解释**： 附件上传信息。数组元素为AttachmentVoExt对象。 **取值范围**： 0\~100个元素，每个元素为AttachmentVoExt对象。                                                                                                                                                                                                                                                                                                                                                                                |
   
 表4AttachmentVoExt 
| 参数              | 参数类型                                                                           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| progress        | Integer                                                                        | **参数解释**： 上传进度。 **取值范围**： 0\~100。                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| id              | String                                                                         | **参数解释**： 附件ID。 **取值范围**： 18\~19个字符的数字字符串。                                                                                                                                                                                                                                                                                                                                                                                                                         |
| workitem_id     | String                                                                         | **参数解释**： 工作项ID。 **取值范围**： 18\~19个字符的数字字符串。                                                                                                                                                                                                                                                                                                                                                                                                                        |
| store_filename  | String                                                                         | **参数解释**： 文件名。 **取值范围**： 0\~256个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| associate_type  | String                                                                         | **参数解释**： 关联类型。 **取值范围**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| disk_directory  | String                                                                         | **参数解释**： 附件在服务器上的相对存储路径。 **取值范围**： 0\~1024个字符。                                                                                                                                                                                                                                                                                                                                                                                                                    |
| type            | String                                                                         | **参数解释**： 类别。 **取值范围**： - attachment：标识元数据类型为附件。                                                                                                                                                                                     |
| category        | String                                                                         | **参数解释**： 元数据类型。 **取值范围**： - Attachment：标识元数据类型为附件。                                                                                                                                                                                  |
| issue_category  | String                                                                         | **参数解释**： 工作项类型。 **取值范围**： 0\~32个字符。                                                                                                                                                                                                                                                                                                                                                                                                                               |
| status          | String                                                                         | **参数解释**： 附件状态。 **取值范围**： 0\~32个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| description     | String                                                                         | **参数解释**： 附件描述。 **取值范围**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| modified_by     | [UserCommonVO] object | 修改人信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| created_by      | [UserCommonVO] object | 创建人信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| domain_id       | String                                                                         | **参数解释**： 项目空间ID。 **取值范围**： 18\~19个字符的数字字符串。                                                                                                                                                                                                                                                                                                                                                                                                                       |
| attachment_type | String                                                                         | **参数解释**： 文件类型。 **取值范围**： 0\~32个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| created_date    | String                                                                         | **参数解释**： 创建时间戳。 **取值范围**： 13\~19个字符。                                                                                                                                                                                                                                                                                                                                                                                                                              |
| storage_service | String                                                                         | **参数解释**： 处理附件的后台服务名。 **取值范围**： 0\~32个字符。                                                                                                                                                                                                                                                                                                                                                                                                                          |
| storage_id      | String                                                                         | **参数解释**： 数据库中使用的存储ID。 **取值范围**： 0\~32个字符。                                                                                                                                                                                                                                                                                                                                                                                                                         |
| delete_flag     | Boolean                                                                        | **参数解释**： 是否已经删除。 **取值范围**： - false：未删除。   - true：已删除。    |
| filesize        | Long                                                                           | **参数解释**： 文件大小，单位为Byte。 **取值范围**： 0\~104857600（即0\~100MB）。                                                                                                                                                                                                                                                                                                                                                                                                         |
| title           | String                                                                         | **参数解释**： 服务器上实际名称。 **取值范围**： 32\~128个字符。                                                                                                                                                                                                                                                                                                                                                                                                                          |
   
 表5UserCommonVO 
| 参数          | 参数类型    | 描述                                                                                                                                                                                                           |
|:---|:---|:---|
| user_id     | String  | **参数解释**： 用户ID。 **取值范围**： 不涉及。                      |
| user_num_id | Integer | **参数解释**： 用户短ID。 **取值范围**： 不涉及。                     |
| user_name   | String  | **参数解释**： 用户名称。 **取值范围**： 不涉及。                      |
| domain_id   | String  | **参数解释**： 用户所属域ID。 **取值范围**： 不涉及。                   |
| domain_name | String  | **参数解释**： 租户名称。 **取值范围**： 不涉及。                      |
| nick_name   | String  | **参数解释**： 用户昵称。 **取值范围**： 不涉及。                      |
| role_id     | String  | **参数解释**： 角色ID，用户在项目中具有多个角色时用英文逗号分隔。 **取值范围**： 不涉及。 |
| role_name   | String  | **参数解释**： 用户角色名称，多个角色用英文逗号分隔。 **取值范围**： 不涉及。        |
| image_id    | String  | **参数解释**： 用户头像。 **取值范围**： 不涉及。                      |
| region      | String  | **参数解释**： 用户所属区域。 **取值范围**： 不涉及。                    |
| watcher     | Integer | **参数解释**： 观察者。 **取值范围**： 不涉及。                       |
| opinion     | String  | **参数解释**： 评审信息。 **取值范围**： 不涉及。                      |
| description | String  | **参数解释**： 描述。 **取值范围**： 不涉及。                        |
| owner       | String  | **参数解释**： 当前处理人。 **取值范围**： 不涉及。                     |
| ccbId       | String  | **参数解释**： 评审对象ID。 **取值范围**： 不涉及。                    |
| status      | Integer | **参数解释**： 状态。 **取值范围**： 不涉及。                        |
| has_removed | String  | **参数解释**： 用户是否已移出项目。 **取值范围**： 不涉及。                 |
   
**状态码：400**
表6响应Body参数 
| 参数         | 参数类型   | 描述                                                                                                                                                                                                       |
|:---|:---|:---|
| error_code | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                   |
| error_msg  | String | **参数解释**： 错误描述，对error_code的补充解释。 **取值范围**： 不涉及。 |
   
#### 请求示例
假设项目ID为gdbdf969b32694524a949b5ef6b3e124a，工作项ID为956239067176935400，给该工作项上传一个名为"demo.PNG"的图片附件，示例如下：
```
POST https://{endpoint}/v1/ipdprojectservice/projects/gdbdf969b32694524a949b5ef6b3e124a/issues/956239067176935400/attachments/upload
------WebKitFormBoundary1kuNerRnRVVybt65
Content-Disposition: form-data; name="attachment"; filename="demo.PNG"
Content-Type: image/png
```
#### 响应示例
**状态码：200**
上传附件成功的响应。
```
{
  "status" : "success",
  "message" : "",
  "result" : [ {
    "progress" : 100,
    "id" : "1212813884362502144",
    "workitem_id" : "1212811957668290561",
    "associate_type" : null,
    "disk_directory" : "/projects/687a0637cf814b65b77b3e781af19ab2/attachments/6b570776a30844e7b6361f00c2a1a5bf.xlsx",
    "filesize" : "36449",
    "store_filename" : "TTT.xlsx",
    "title" : "6b570776a30844e7b6361f00c2a1a5bf.xlsx",
    "type" : "attachment",
    "category" : "Attachment",
    "issue_category" : null,
    "status" : null,
    "description" : null,
    "modified_by" : {
      "watcher" : null,
      "user_id" : "fcb28511450247ffbf78071035f9543c",
      "user_num_id" : 13369,
      "user_name" : "CodeArtsReq_GA2_MAX_Items",
      "domain_id" : "cdf72eb7297642da8c4b0dffe4f4f14b",
      "domain_name" : "CodeArtsReq_Test",
      "nick_name" : "CodeArtsReq_GA2_MAX_Items",
      "role_id" : null,
      "role_name" : null,
      "image_id" : null,
      "region" : null,
      "opinion" : null,
      "description" : null,
      "owner" : null,
      "ccbId" : null,
      "status" : 1,
      "has_removed" : null
    },
    "created_by" : {
      "watcher" : null,
      "user_id" : "fcb28511450247ffbf78071035f9543c",
      "user_num_id" : 13369,
      "user_name" : "CodeArtsReq_GA2_MAX_Items",
      "domain_id" : "cdf72eb7297642da8c4b0dffe4f4f14b",
      "domain_name" : "CodeArtsReq_Test",
      "nick_name" : "CodeArtsReq_GA2_MAX_Items",
      "role_id" : null,
      "role_name" : null,
      "image_id" : null,
      "region" : null,
      "opinion" : null,
      "description" : null,
      "owner" : null,
      "ccbId" : null,
      "status" : 1,
      "has_removed" : null
    },
    "domain_id" : "1212810843328520193",
    "attachment_type" : "xlsx",
    "created_date" : "1767086963022",
    "storage_service" : "IPDProjectService",
    "storage_id" : "6b570776a30844e7b6361f00c2a1a5bf",
    "delete_flag" : false
  } ]
}
```
**状态码：400**
上传附件失败的响应，例如：无操作权限、工作项已删除等
```
{
  "error_code" : "PM.02175145",
  "error_msg" : "工作项已删除"
}
```
#### 状态码
| 状态码 | 描述                         |
|:---|:---|
| 200 | 上传附件成功的响应。                 |
| 400 | 上传附件失败的响应，例如：无操作权限、工作项已删除等 |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-projectman/ErrorCode.html)。
