
# 上传段
#### 功能说明
初始化分段上传任务后，通过分段上传任务的ID，上传段到指定桶中。除了最后一段以外，其他段的大小范围是100KB\~5GB；最后段大小范围是0\~5GB。上传的段号也有范围限制，其范围是1\~10000。
#### 方法定义
```
ObsClient.uploadPart
```
#### 请求参数
| **字段名**          | **类型**                                                                      | **约束** | **说明**                                                                                                             |
|:---|:---|:---|:---|
| Bucket           | String                                                                      | 必选     | 桶名。                                                                                                                |
| Key              | String                                                                      | 必选     | 对象名。                                                                                                               |
| RequestDate      | String 或 Date | 可选     | 指定请求时间。 说明： 当为String类型时，必须符合ISO8601或RFC822规范。            |
| PartNumber       | Number                                                                      | 必选     | 段号，取值范围：1\~10000。                                                                                                  |
| UploadId         | String                                                                      | 必选     | 分段上传任务的ID。                                                                                                         |
| ContentMD5       | String                                                                      | 可选     | 待上传对象数据的MD5值（经过Base64编码），提供给OBS服务端，校验数据完整性。                                                                        |
| Body             | String                                                                      | 可选     | 待上传对象的内容。                                                                                                          |
| SourceFile       | File 或 Blob   | 可选     | 待上传段的源文件（浏览器必须支持FileReader）。                                                                                       |
| ProgressCallback | Function                                                                    | 可选     | 获取上传进度的回调函数。 说明： 该回调函数依次包含三个参数：已上传的字节数、总字节数、已使用的时间（单位：秒）。 |
| Offset           | Number                                                                      | 可选     | 当设置了SourceFile时有效，代表源文件中某一分段的起始偏移大小，默认值为0， 单位为字节。                                                                  |
| PartSize         | Number                                                                      | 可选     | 当设置了SourceFile时有效，代表源文件中某一分段的大小，默认值为文件大小减去Offset的剩下字节数，单位为字节。除最后一段的大小范围是0\~5GB外，其他段的大小范围是100KB\~5GB。               |
| SseC             | String                                                                      | 可选     | 以SSE-C方式加密段，支持的值： AES256                                                            |
| SseCKey          | String                                                                      | 可选     | SSE-C方式下加密的密钥，该密钥需要您自定义，并由256bit的密钥经过base64编码得到。                                                                   |
   
![](https://support.huaweicloud.com/api-obs_browserjs_sdk_api_zh/public_sys-resources/note_3.0-zh-cn.png)
- Body与SourceFile不能同时使用。
- 当Body与SourceFile都为空时，上传对象的大小为0字节。
- Offset、PartSize和SourceFile配套使用，用于指定上传源文件中的某一分段数据。
 
#### 返回结果（InterfaceResult）
| 字段名       | 类型     | 说明             |
|:---|:---|:---|
| RequestId | String | OBS服务端返回的请求ID。 |
| ETag      | String | 当前上传段的ETag值。   |
   
#### 代码样例
```
obsClient.uploadPart({
       Bucket:'bucketname',
       Key : 'objectkey',
       UploadId : 'uploadid',
       PartNumber : 1,
       Body : 'Hello OBS'
},function (err, result) {
       if(err){
              console.error('Error-->' + err);
       }else{
              if(result.CommonMsg.Status < 300){
                     console.log('RequestId-->' + result.InterfaceResult.RequestId);
                     console.log('ETag-->' + result.InterfaceResult.ETag);
              }else{
                     console.log('Code-->' + result.CommonMsg.Code);
                     console.log('Message-->' + result.CommonMsg.Message);
              }
       }
});
```
