
# 上传段
#### 功能说明
初始化分段上传任务后，通过分段上传任务的ID，上传段到指定桶中。除了最后一段以外，其他段的大小范围是100KB\~5GB；最后一段的大小范围是0\~5GB。上传的段号也有范围限制，其范围是1\~10000。
#### 方法定义
```
1. ObsClient->uploadPart(array $parameter)
2. ObsClient->uploadPartAsync(array $parameter, callable $callback)
```
#### 请求参数
| **字段名**    | **类型**                                                                                                                                                                      | **约束** | **说明**                                                                           |
|:---|:---|:---|:---|
| Bucket     | string                                                                                                                                                                      | 必选     | 桶名。                                                                              |
| Key        | string                                                                                                                                                                      | 必选     | 对象名。                                                                             |
| PartNumber | integer                                                                                                                                                                     | 必选     | 段号，取值范围：1\~10000。                                                                |
| UploadId   | string                                                                                                                                                                      | 必选     | 分段上传任务的ID。                                                                       |
| ContentMD5 | string                                                                                                                                                                      | 可选     | 待上传段数据的MD5值（经过Base64编码），提供给OBS服务端，校验数据完整性。                                       |
| Body       | string 或 resource 或 GuzzleHttp\\Psr7\\StreamInterface | 可选     | 待上传段的内容。                                                                         |
| SourceFile | string                                                                                                                                                                      | 可选     | 待上传段的源文件路径。                                                                      |
| Offset     | integer                                                                                                                                                                     | 可选     | 源文件中某一分段的起始偏移大小，默认值为0， 单位为字节。                                                    |
| PartSize   | integer                                                                                                                                                                     | 可选     | 源文件中某一分段的大小，默认值为文件大小减去Offset的剩下字节数，单位为字节。除最后一段的大小范围是0\~5GB外，其他段的大小范围是100KB\~5GB。 |
| SseC       | string                                                                                                                                                                      | 可选     | 以SSE-C方式加密段，支持的值：AES256                                                          |
| SseCKey    | string                                                                                                                                                                      | 可选     | SSE-C方式下加密的密钥，该密钥需要您自定义，并由256bit的密钥经过base64编码得到。                                 |
   
![](https://support.huaweicloud.com/api-obs_php_sdk_api_zh/public_sys-resources/note_3.0-zh-cn.png)
- Body与SourceFile不能同时使用。
- 当Body与SourceFile都为空时，上传对象的大小为0字节。
- Offset、PartSize和SourceFile配套使用，用于指定上传源文件中的某一分段数据。
 
#### 返回结果
| 字段名            | 类型      | 说明                                                                                                                         |
|:---|:---|:---|
| HttpStatusCode | integer | HTTP状态码。                                                                                                                   |
| Reason         | string  | HTTP文本描述。                                                                                                                  |
| RequestId      | string  | OBS服务端返回的请求ID。                                                                                                             |
| ETag           | string  | 当前上传段的ETag值。                                                                                                               |
| SseKms         | string  | SSE-KMS方式的算法。                                                                                                              |
| SseKmsKey      | string  | SSE-KMS加密方式下使用的KMS主密钥的ID值，为空则默认配置为默认密钥。密钥ID获取方法请参见[查看密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。 |
| SseC           | string  | SSE-C方式的算法。                                                                                                                |
| SseCKeyMd5     | string  | SSE-C方式的密钥的MD5值。                                                                                                           |
   
#### 代码样例
```
try {
       $resp = $obsClient->uploadPart( [ 
              'Bucket' => 'bucketname',
              'Key' => 'objectkey',
              'UploadId' => 'uploadid',
              'PartNumber' => 1,
              'Body' => 'Hello OBS'
       ] );
       printf ( "RequestId:%s\n", $resp ['RequestId'] );
       printf ( "ETag:%s\n", $resp ['ETag'] );
} catch ( Obs\Common\ObsException $obsException ) {
       printf ( "ExceptionCode:%s\n", $obsException->getExceptionCode () );
       printf ( "ExceptionMessage:%s\n", $obsException->getExceptionMessage () );
}
```
