# 合并分片完成上传

> 提交各分片的 ETag,合并为一个文件,拿到可下载地址 DownloadUrl。

POST
  https://platform.ikho.cn/developer/api/open/partner/files/upload/complete-upload
  试一试 

  
## 鉴权

  

  
    Authorization
    string
    header
    必填
    
  

  Bearer 加上用户访问令牌。

  

  

  
    Content-Type
    string
    header
    必填
    默认 application/json
  

  请求内容类型。

  

  
## 请求体

  

  
    file_id
    string
    
    必填
    
  

  生成预签名地址时返回的 FileId。

  

  

  
    upload_id
    string
    
    必填
    
  

  生成预签名地址时返回的 UploadId。

  

  

  
    part_list
    array
    
    必填
    
  

  各分片的序号与 ETag,来自每次 PUT 的响应头。

  子属性
    

  
    PartNumber
    integer
    
    
    
  

  分片序号,从 1 开始。

  

    

  
    ETag
    string
    
    
    
  

  该分片 PUT 到存储后响应头返回的 ETag。

  

  

  
    filetype
    string
    
    必填
    
  

  音频文件扩展名。

  

  

  
    file_md5
    string
    
    
    
  

  整个文件的十六进制 MD5,用于校验完整性。可选。

  

  
## 响应

  

  
    FileId
    string
    
    
    
  

  已上传文件的标识。

  

  

  
    FileType
    string
    
    
    
  

  音频文件扩展名。

  

  

  
    DownloadUrl
    string
    
    
    
  

  合并后文件的预签名下载地址,有效期约 24 小时。作为 file_url 交给转写 API。

  

  

  
    FileMd5
    string
    
    
    
  

  合并后文件的十六进制 MD5。

  

  

  cURLPython
  

  

  bash
    
  

  
```
curl -X POST "https://platform.ikho.cn/developer/api/open/partner/files/upload/complete-upload" \
  -H "Authorization: Bearer $USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "file_id": "file_9f3c1a",
    "upload_id": "upload_7b2e5d",
    "part_list": [
      { "PartNumber": 1, "ETag": "a1b2c3d4e5f6" },
      { "PartNumber": 2, "ETag": "7g8h9i0j1k2l" }
    ],
    "filetype": "mp3",
    "file_md5": "9e107d9d372bb6826bd81d3542a419d6"
  }'
```

  ts
    
  

  
```
import requests

resp = requests.post(
    class="tk-str">"https:class="tk-cmt">//platform.ikho.cn/developer/api/open/partner/files/upload/complete-upload",
    headers={
        class="tk-str">"Authorization": class="tk-str">"Bearer " + user_token,
        class="tk-str">"Content-Type": class="tk-str">"application/json",
    },
    json={
        class="tk-str">"file_id": class="tk-str">"file_9f3c1a",
        class="tk-str">"upload_id": class="tk-str">"upload_7b2e5d",
        class="tk-str">"part_list": [
            {class="tk-str">"PartNumber": 1, class="tk-str">"ETag": class="tk-str">"a1b2c3d4e5f6"},
            {class="tk-str">"PartNumber": 2, class="tk-str">"ETag": class="tk-str">"7g8h9i0j1k2l"},
        ],
        class="tk-str">"filetype": class="tk-str">"mp3",
        class="tk-str">"file_md5": class="tk-str">"9e107d9d372bb6826bd81d3542a419d6",
    },
)
print(resp.json()[class="tk-str">"DownloadUrl"])
```

  

  200 响应示例
    
  

  
```
{
  "FileId": "file_9f3c1a",
  "FileType": "mp3",
  "DownloadUrl": "https://storage.ikho.cn/download/9f3c1a?...",
  "FileMd5": "9e107d9d372bb6826bd81d3542a419d6"
}
```
